【问题标题】:PHP / Zend custom date input formatsPHP/Zend 自定义日期输入格式
【发布时间】:2010-05-24 15:57:18
【问题描述】:

我正在使用 PHP 和 Zend 为团队中的其他开发人员创建一个库组件。该组件需要能够将日期(字符串)和另一个字符串作为输入,告诉它该日期的格式。浏览 Zend 文档和示例,我想我找到了解决方案 -

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

然而,这一行会引发错误 - 调用未定义的函数。

所以我尝试了这个 -

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

这可以完成工作,但如果输入的日期无效,则会引发错误。文档使您看起来可以使用 isDate() 函数来检查有效性-

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

但是这一行总是返回 false。

所以我的问题 -

我这样做是否正确?如果没有,有没有更好的方法通过 Zend 或直接 PHP 来处理这个问题?

如果我确实使用 Zend_Locale_Format::getDate(),我是否需要担心在其他地方设置语言环境并更改调用结果?

我在 Windows 上被锁定在 PHP 5.2.6,顺便说一句...所以 5.3+ 函数和 strptime() 都出来了。

【问题讨论】:

    标签: php zend-framework date


    【解决方案1】:

    您可能想尝试使用 Zend_Date 常量而不是字符串。我这么说的原因看起来文档中存在一些不一致:

    MM 月份,两位数 Zend_Date::MONTH 02 MMMM 月,本地化,完成 Zend_Date::MONTH_NAME 二月

    然后是:

    所以,如果您使用的是 'dd.MM.yyyy' 会得到 '31.December.2007' 但如果你 使用 'dd.MM.YYYY' 你会得到 '2008 年 12 月 31 日'

    显示 MM 显示字符串?因此,鉴于该格式,您的日期将无法验证。你试过没有格式的 isDate 吗?

    我通过这样做解决了这个问题:

    try
    {
        $myDate = new Zend_Date($date, $format, $locale);
    }
    catch (Zend_Date_Exception $e)
    {
        $myDate = new Zend_Date::now();
    }
    

    【讨论】:

      【解决方案2】:

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

      抛出错误“未定义的函数”,因为它不是函数。根据手册 Zend_Date 是一个带有构造函数的对象,并且格式字符串没有在数组中给出。你必须这样写

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

      一切都很酷。

      ciao 超频

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 2014-08-17
        • 2020-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多