【问题标题】:Problem with short date format in phpphp中短日期格式的问题
【发布时间】:2010-10-19 20:02:01
【问题描述】:

我对 php 中的日期函数有疑问。如果我以“d.m.y”格式提供字符串,例如“01.01.01”,它会呈现为今天的日期,这意味着 php 会感到困惑。

我找到了:

注意:

“日、月和两位数的年份,带点或制表符”格式(dd [.\t] mm "." yy) 仅适用于 61(含)到 99 的年份 (含)- 在那些年份之外,时间格式“HH [.:] MM [.:] SS”有 优先级。

开启:php.net site

如何覆盖此行为?

我知道 date_create_from_format 函数,如果我知道输入将始终采用“d.m.y”格式,它会正常工作,但它不会。

更新 1:

代码

$date = new DateTime('01.01.01');
echo $date->format('Y-m-d');

输出 2010-10-19,我想要 2001-01-01。

【问题讨论】:

  • 为什么要用这么多词来描述你的所作所为?为什么不是一行实际代码? date() 函数与格式化字符串无关。所以,整个问题毫无意义。
  • 另外,为了记录,您的“dd.mm.yy”日期掩码将打印两次日、月和年。正确的掩码可能是“d.m.y”。
  • OP 有一个日期 01.01.01 并希望从中生成一个时间戳。这不会自动工作,因为strtotime 使01.01 设置时间而不是日期。
  • @Chris Henry:在 unix 日期格式之外,用符号 dmyhm 和 @987654331 来描述格式是很常见的@ 这些字符的数量决定了渲染。例如,yy 是两位数年份,yyyy 是四位数年份,d 是非零填充日,dd 是零填充日。

标签: php date format


【解决方案1】:

要格式化现在以外的日期,请使用第二个参数。例如:

echo date("d.m.y", 1255982665);

呼应 19.10.09

【讨论】:

    【解决方案2】:

    只需阅读文档! PHP的网站很棒

    您似乎想重新格式化日期?

    mktime() 从组件中给出 unix 时间戳 date() 给出来自 unixtimestamp 的字符串(或现在隐含的) getdate() 从 unix 时间戳给出 assoc 数组

    我想你想要 -

    $arr = explode($dateIn, ':'); //获取数组[日、月、年]
    $timestamp = mktime(0,0,0, $arr[0], $arr[1], $arr[2]) //unix时间戳,代表时间的长整数
    日期(DESIREDFORMAT,$timestamp);

    在此处查看输出格式 - http://us2.php.net/manual/en/function.date.php

    【讨论】:

    • 引用 OP:“如果我知道输入将始终采用“dd.mm.yy”格式,但它不会。” – 所以你的 explode没用。
    • Poke 是对的。如果出现“。”,您的解决方案确实有帮助。作为分隔符。我首先必须找到不是数字的字符的分隔符并将其用作分解参数。
    【解决方案3】:
    function getDateFromString( $str )
    {
        $date = DateTime::createFromFormat( 'd.m.y', $str );
        if ( $date !== false )
            return $date->getTimestamp();
    
        // you can try other common formats here
        // ...
    
        // otherwise just parse whatever there is
        return strtotime( $str );
    }
    
    echo date( 'd.m.Y H:i', getDateFromString( '01.01.01' ) ); // 01.01.2001 20:14
    

    编辑

    再调整一下以获得您的准确输出:

    function getDateTimeFromString( $str )
    {
        $date = DateTime::createFromFormat( 'd.m.y', $str );
        if ( $date !== false )
            return $date;
    
        // you can try other common formats here
        // ...
    
        // otherwise just parse whatever there is
        return new DateTime( $str );
    }
    
    $date = getDateTimeFromString( '01.01.01' );
    echo $date->format( 'Y-m-d' ); // 2001-01-01
    

    【讨论】:

    • 我不太喜欢自己测试所有可能的格式,我更希望找到简单的 php 方法。不过我最喜欢你的回答。
    • 好吧,你不必测试所有可能的格式,检查那些不适用于普通new DateTime( $str ) 的格式就足够了;并且不应该有那么多不同的格式。
    • 只剩下一个问题,这是我刚刚发现的,那就是:在生产服务器上,我有 php 5.2.6 并且该版本不支持 DateTime::createFromFormat。
    • @Milan:您可以改用strptime 来解析给定的日期格式并将其结果传递给DateTime::setDatemktime 以构造日期。
    • 致投反对票的人:能否请您留下您投反对票的理由?越来越烦人了。
    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多