【问题标题】:d/m/y to Y-m-d php stringtotime not working correctlyd/m/y 到 Y-m-d php stringtotime 无法正常工作
【发布时间】:2013-02-22 16:32:14
【问题描述】:

我有一个格式为 d/m/y 的日期字符串,例如22/02/13

我想将此字符串回显为Y-m-d,但使用以下代码,它不起作用。

$d = '22/02/13';
echo date('Y-m-d', strtotime($d));

输出:1970-01-01

我做错了什么?我是否必须将 / 分解为分隔符并手动完成,还是有更简单/更优雅的解决方案?

【问题讨论】:

  • 22/02/13 !== 22-02-13。第一个你有 m/d/Y,第二个有 d-m-Y。似乎是 PHP 核心中的位置验证

标签: php date explode


【解决方案1】:

使用日期时间:

$datetime = DateTime::createFromFormat('d/m/y', '22/02/13');
echo $datetime->format('Y-m-d');

See it in action

参考

【讨论】:

    【解决方案2】:

    来自manual

    注意:

    m/d/y 或 d-m-y 格式的日期可以通过查看来消除歧义 各个组件之间的分隔符:如果分隔符是 斜线 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),然后是欧洲 d-m-y 格式 是假定的。

    为避免潜在的歧义,最好使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat() 尽可能。

    tl;dr:如果你使用斜线,它会将它视为 m/d/y 疯狂的美式约会。

    最简单的解决方法是使用DateTime class 创建您自己的格式:

    $date= DateTime::createFromFormat('d/m/y', '21/11/13');
    echo $date->format('Y-m-d');
    

    【讨论】:

    • +1 表示“使用createFromFormat”。当createFromFormat 可用时,我不知道为什么人们坚持使用strtotime() 功能。我猜人们仍然在从前十年编写的网络教程中学习 PHP。
    【解决方案3】:

    使用/ 会使 PHP 认为您使用的是美国风格的日期格式 (mm/dd/yy),因此将它们替换为所需输出的破折号:

    $d = str_replace('/', '-', '22/02/13');
    echo date('Y-m-d', strtotime($d));
    

    【讨论】:

      【解决方案4】:

      看看

      DateTime::createFromFormat(...)
      

      这将创建一个正确的 DateTime 值。

      【讨论】:

        【解决方案5】:

        更简单的方法:

        $d = '22.02.13';
        echo date('Y-m-d', strtotime($d));
        

        感谢 ;)

        【讨论】:

          【解决方案6】:
          echo implode("-", array_reverse(explode('/', $val)));
          

          【讨论】:

            【解决方案7】:

            为此

            "注意: m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。 为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。”

            http://php.net/strtotime

            【讨论】:

              猜你喜欢
              • 2021-03-09
              • 1970-01-01
              • 2018-05-25
              • 2021-05-16
              • 1970-01-01
              • 2022-01-20
              • 1970-01-01
              • 1970-01-01
              • 2011-10-24
              相关资源
              最近更新 更多