Page 1 of 1

Date input (SOLVED)

PostPosted: Wed Jun 02, 2010 2:56 am
by cantlep
Hiya,

When entering a date in a field in "New Record". The calendar function allows the date to be selected..Brilliant. However, when it's actually copied into the field, it's in US format (MM/DD/YY). Is there a way to make it UK format (DD/MM/YY). I have it in UK record format once the details have been "saved"..it's just in the new record bit I'd like to change it. Is this something in Xataface or some other locale type setting on the system?

Thanks

Paul

Re: Date input

PostPosted: Mon Jun 07, 2010 9:45 am
by shannah
Yes. You can adjust the format that the calendar widget accepts for dates using the widget:ifFormat directive in the fields.ini file:
Code: Select all
[myfield]
widget:ifFormat="%Y-%m-%d %I:%M %P"


The format should use the same variables as the strftime function:
http://php.net/manual/en/function.strftime.php

Re: Date input (SOLVED)

PostPosted: Mon Jun 07, 2010 1:52 pm
by cantlep
Hi Steve,

Cheers. Works like a charm.

Thanks

Paul

Re: Date input (SOLVED)

PostPosted: Wed Nov 14, 2012 2:25 pm
by marcelo.guedes
Hi.

This solution is not working any more in 2.0alpha1.

When I insert the ifFormat parameter I have date inconsistencies. For instance:

For widget:ifFormat="%d/%m/%Y", when I click on the calendar icon and select the date "1st February, 2012" it shows in the field: "01/02/2012". Nice, perfect. But when I save it, the database stores "2011-01-02" or the date "2nd January, 2011". More than that, when I try to find the date in the calendar again the select date is different from both, showing "4th July, 2007".

I have no idea what's going on here. I tried to created the function <datefield>__pull in this way:

Code: Select all
  function datefield__pull(&$record){
    if ($record->val('datefield') == NULL) {
      return '';
    }else{
      return date('d/m/Y', strtotime($record->strval('datefield')));
    }
  }


However, it only created a new level of inconsistencies and it didn't solved the issue.

Ideas?

Re: Date input (SOLVED)

PostPosted: Wed Nov 14, 2012 3:14 pm
by shannah
I have added this issue to the issue tracker
http://bugs.weblite.ca/view.php?id=1179
http://bugs.weblite.ca/view.php?id=1180 (duplicate for 1.3.x branch)

And I have fixed the issue.

You can get the update by replacing your Dataface/FormTool/calendar.php file with the one at
http://weblite.ca/svn/dataface/core/tru ... lendar.php

-Steve

Re: Date input (SOLVED)

PostPosted: Wed Nov 14, 2012 4:26 pm
by marcelo.guedes
Hi!

It worked here, requiring all the modifications together:
delegate classes <datefield>__pullValue as reported in forum
+
widget:ifFormat = "%d/%m/%Y"
+
the new calendar.php file.

Suggestion:
This calendar.php solution can't deal with empty field. It returns a old date instead (strange it seems, different old dates when using or not using ifFormat). To deal with NULL field, I would like to suggest a small modification in function pushValue:

Code: Select all
33,37d32
<
< if (trim($element->getValue()) == NULL)   {
<   return NULL;
< }
<
38a34
>    


It will deal with NULL and white spaces. My function is now:

Code: Select all
   /**
    * @brief Added support to transform date values in alternate formats
    * as provided by the widget:ifFormat directive.
    * http://xataface.com/forum/viewtopic.php?f=4&t=5345
    */
   function pushValue(&$record, &$field, &$form, &$element, &$metaValues){
      $table =& $record->_table;
      $formTool =& Dataface_FormTool::getInstance();
      $formFieldName = $field['name'];

      if (trim($element->getValue()) == NULL)   {
         return NULL;
      }

      if ( @$field['widget']['ifFormat'] ){
         $ts = strptime($element->getValue(), $field['widget']['ifFormat']);
         $ts = mktime($ts['tm_hour'], $ts['tm_min'], $ts['tm_sec'],
                     $ts['tm_mon']+1, $ts['tm_mday'], ($ts['tm_year'] + 1900));
            return date('Y-m-d H:i:s', $ts);
      } else {
         return $element->getValue();
      }
      
   }


Here it is working just as expected now. I didn't test enough about the cases without ifFormat but maybe it is a good idea to be careful because they are treated in different ways.

Thank you very much.

Re: Date input (SOLVED)

PostPosted: Wed Nov 14, 2012 4:33 pm
by shannah
Thanks for pointing this out. I have made some changes in the trunk to address this issue.
http://weblite.ca/svn/dataface/core/tru ... lendar.php

Re: Date input (SOLVED)

PostPosted: Wed Nov 14, 2012 4:42 pm
by marcelo.guedes
Updated here. Working like a charm.