【问题标题】:Yet another php date format issue另一个php日期格式问题
【发布时间】:2012-10-30 10:27:03
【问题描述】:

我在字符串上有这种日期格式 d-m-y,因此 01-01-12 是 2012 年 1 月 1 日。

现在,我想将其转换为 php 中的日期对象,以对一组日期进行排序,这些日期作为字符串存储在数组中。

目前,我正在使用 strtotime 和 date

$keypoints[] = date('d-m-y', strtotime($date_str));

但这是对生成的日期进行排序,就好像格式是 y-m-d。问题是如何设置strtotime函数的输入格式?

提前致谢

【问题讨论】:

    标签: php date format strtotime


    【解决方案1】:

    PHP 的 strtotime() 返回一个 unix 时间戳,它只是一个数字。您是否考虑过将这些存储在您的数组中并像这样进行排序?然后,您可以在需要时转换回好看的日期,例如用于输出。

    【讨论】:

      【解决方案2】:

      strtotime 中带有反斜杠的日期被读取为 m/d/y,而带有 - 作为分隔符的天被读取为 d-m-y

      来自手册:

      注意:

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

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

      【讨论】:

        【解决方案3】:

        试试这个以Y-m-d格式获取日期

        $date_arr = explode('-', $date_str);
        $keypoints[] = date("Y-m-d", mktime(0, 0, 0, $date_arr[1], $date_arr[0], $date_arr[2]));
        

        【讨论】:

        • 这个怎么样? $date_arr = explode('-', $date_str);$keypoints[] = date("d-m-y", mktime(0, 0, 0, $date_arr[1], $date_arr[0], $date_arr[2]) );
        • 然后您将获得与输出相同的输入日期字符串。 y2 数字和Y 中给出完整的4 数字。如果您的意思是这样,您可以使用d-m-Y
        • 如果您打算使用它进行排序,请仅使用 mktime 部分。排序后,您可以将其转换为所需的格式。
        【解决方案4】:

        你不能。 explode() 你的 01-01-12 日期,并使用 mktime() 生成的片段来获得正确的 unixtime。

        【讨论】:

        • 您可以使用 '-' 或 '.'作为你的分隔符而不是反斜杠
        【解决方案5】:

        在 PHP 手册页中,strtotime 接受“日期/时间字符串。Date and Time Formats 中解释了有效格式。

        另一种方法是使用DateTime::createFromFormat

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-05
          • 2016-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-27
          相关资源
          最近更新 更多