PHP / Zend custom date input formats-Collection of common programming errors

I’m creating a library component for other developers on my team using PHP and Zend. This component needs to be able to take as input a date (string) and another string telling it the format of that date. Looking through the Zend documentation and examples, I thought I found the solution –

$dateObject = Zend_Date('13.04.2006', array('date_format' => 'dd.MM.yyyy'));

this line, however, throws an error – call to undefined function.

So instead I tried this –

$dt = Zend_Locale_Format::getDate('13.04.2006', array('date_format' => 'dd.MM.yyyy'));

This gets the job done, but throws an error if a date that is entered isn’t valid. The docs make it look like you can use the isDate() function to check validity –

Zend_Date::isDate('13.04.2006', array('date_format' => 'dd.MM.yyyy'))

but this line always returns false.

So my questions –

Am I going about this the right way? If not, is there a better way to handle this via Zend or straight PHP?

If I do use Zend_Locale_Format::getDate(), do I need to worry about a locale being set elsewhere and changing the results of the call?

I’m locked into PHP 5.2.6 on windows, btw… so 5.3+ functions & strptime() are out.

  1. Take a look at this post. Maybe it will help.

  2. You might want to try using the Zend_Date constants instead of strings. The reason I say this is looks like there’s some inconsistency in the docs:

    MM     Month, two digit                   Zend_Date::MONTH       02
    MMMM   Month, localized, complete         Zend_Date::MONTH_NAME  February
    

    and then later on:

    So, if you are using ‘dd.MM.yyyy’ you will get ’31.December.2007′ but if you use ‘dd.MM.YYYY’ you will get ’31.December.2008′

    Shows MM showing a string? So your date would not validate given that format. Have you tried isDate without a format?

    I’ve got around this issue by doing this:

    try
    {
        $myDate = new Zend_Date($date, $format, $locale);
    }
    catch (Zend_Date_Exception $e)
    {
        $myDate = new Zend_Date::now();
    }
    
  3. $dateObject = Zend_Date(‘13.04.2006’, array(‘date_format’ => ‘dd.MM.yyyy’));

    throws an error “undefined function” because it is no function. accordingly to the manual Zend_Date is an Object with a constructor and the format string is not given in an array. you have to write it like this

    $dateObject = new Zend_Date(‘13.04.2006’, ‘dd.MM.yyyy’);

    and everything is cool.

    ciao ulf

Originally posted 2013-11-10 00:13:54.