【问题标题】:Php time format conversionphp时间格式转换
【发布时间】:2011-08-10 17:13:47
【问题描述】:

我有以下时间格式:15/08/2011 12:32:23 日/月/年时:分:秒,我想转换为以下格式:Y-m-d H:i:s

我尝试使用date('Y-m-d H:i:s', strtotime($time)),但它不起作用。它在从字符串转换为日期数字时交换月份和日期。

【问题讨论】:

    标签: php datetime-conversion


    【解决方案1】:

    strtotime 理解美国 (mm/dd/YYYY) 和欧洲 (dd-mm-YYYY or dd.mm.YYYY) 格式。您使用斜线来分隔日、月和年,这就是为什么您的日期被解释为美国的原因。要解决此问题,请将斜杠替换为破折号。

    【讨论】:

    • 这个总是让我有点困惑,因为我是欧洲人并且使用斜线。并不是我们都聚集在这里,决定在我们所有的学校或其他任何地方教授相同的格式。没有美国人用破折号吗?
    • 可能有,但 PHP 手册页 php.net/manual/en/datetime.formats.date.phpmm/dd/YYYY 报告为美国格式。如果您想同时支持dd/mm/YYYYmm/dd/YYYY,则必须找到一种方法来确定10/01/2011 是指10 Jan 2011 还是01 Oct 2011。因此,美国人的mm/dd/YYYY 格式使用斜线,而世界其他地区的dd-mm-YYYY 可以使用制表符、点或破折号。如果您想安全,请使用 ISO8601 符号。
    【解决方案2】:

    在这种情况下,您可以非常简单地从字符串中交换月份和日期:

    $time_string = "15/08/2011 12:32:23";
    $strtotime = explode("/",$time_string);
    $strtotime = implode("/",array($strtotime[1], $strtotime[0], $strtotime[2]));
    echo date('Y-m-d H:i:s', strtotime($strtotime));
    

    工作示例:http://codepad.viper-7.com/234toO

    【讨论】:

      【解决方案3】:

      您将不得不重新解析时间。 strtotime 认为您正在尝试输入格式为'm/d/Y H:i:s' 的字符串,但您提供的是'd/m/Y H:i:s'

      list($date, $times) = explode(' ', $time);
      list($day, $month, $year) = explode('/', $date);
      $newTime = date('Y-m-d H:i:s', strtotime("$month/$day/$year $times");
      

      【讨论】:

        【解决方案4】:

        用连字符替换日期中的斜杠,然后尝试它会起作用。

        $a = '07/08/2019'; // 07 is day 08 is month.
        echo date('Y-m-d', strtotime($a)); //output: 2019-07-08 where 07 became month.
        $a = str_replace("/","-","07/08/2019"); // 07-08-2019
        echo date('Y-m-d', strtotime($a)); //2019-08-07
        

        【讨论】:

          猜你喜欢
          • 2011-02-14
          • 2012-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多