【问题标题】:Convert String (ISO) to Date PHP将字符串 (ISO) 转换为日期 PHP
【发布时间】:2016-06-24 05:28:08
【问题描述】:

我正在尝试将字符串转换为PHP 中的日期。我收到的字符串格式为:-

"2016-07-16T1:22:04.324+1030"

"2016-12-20T03:24:59.000Z"

当我尝试这个时

$newDate = DateTime::createFromFormat("c", $exp);
$expirationDate = $newFormat->getTimestamp();

DateTime 失败。即使我尝试了

$newDate = DateTime::createFromFormat(ISO8601, $exp;
$expirationDate = $newFormat->getTimestamp();

DateTime 仍然失败。

非常感谢任何建议。

【问题讨论】:

  • 首先ISO8601的毫秒日期格式只有一个:YYYY-MM-DDThh:mm:ss[.sss]。所以你的字符串不是 ISO861。

标签: php datetime


【解决方案1】:

你可以这样尝试:-

<?php

$time = "2016-07-16T1:22:04.324+1030";

echo date("d M, Y",strtotime(date($time)));

?>

输出:- 2016 年 7 月 16 日:- https://eval.in/594695

参考:-

Converting ISO 8601 format to d M Y in PHP

注意:- 您可以根据自己的方便更改日期格式。比如D M d Y h:i:s O T。我在 PHP 5.5.4、PHP 5.5.14、PHP 7 上检查了这段代码

【讨论】:

  • 这对于"2016-07-16T1:22:04.324+1030"这种格式的字符串非常有用,但是在输入"2016-12-20T03:24:59.000Z"时它会给我一个负数
  • 我看到它在您的链接上有效。当我拉出date() 并输入我的日期2016-12-20T03:24:59.000Z 后,它输出2017-07-10MDT13:57:37.000-21600 因此,当我使用strtotime() 时,它给出了一个负数,因为该函数与我的日期相似。
  • 运行date("2016-12-20T03:24:59.000Z") 时,输出为2017-07-10MDT13:57:37.000-21600 这就是为什么我从date("d M, Y",strtotime(date($time))); 中得到一个负数
  • 你是对的。我不知道为什么在我的代码中它会在其他地方工作时输出那个奇怪的日期。
  • 为什么要在已经格式化的日期时间上运行date() 函数?在这种情况下,T 部分被替换为时区缩写...
【解决方案2】:

您在此处传递的 date format 不是您在函数中比较的那个,它应该是这样的

$exp = "2016-07-16T1:22:04.324+1030";
$newDate = DateTime::createFromFormat("Y-m-d\TG:i:s.uO",$exp);
echo $newDate->format("Y-m-d H:i:s O");//2016-07-16 01:22:04 +1030

【讨论】:

    【解决方案3】:
    $dateval="2016-07-16T1:22:04.324+1030";
    $dateval=str_replace("T"," T",$dateval);
    
    $date = new DateTime($dateval);
    echo $date->format('D M d Y h:i:s O T');//outputs your given time
    echo "<br />";
    

    echo date("D M d Y h:i:s O T",strtotime($dateval));//outputs your based on your timezone time
    

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      虽然我回答这个问题的时间比提问的时间晚得多,但我认为以下几点将有助于证实已经提供的答案。

      使用 strtotime 函数时要记住的要点:

      1.年份为两位数:如果在字符串中以两位数指定年份,则 00-69 之间的值映射到 2000-2069 和 70-99 到 1970-1999。可能的差异可能出现在 32 位中。

      2。使用分隔符:使用分隔符可能会出现意外的输出。分隔斜线 ("/") 将指示 PHP 日期是美国格式,即 m/d/y。而分隔符破折号或圆点(“-”或“.”)将让 PHP 采用欧洲格式,即 d-m-y。此外,如果年份用破折号分隔符指定为两位数,那么 PHP 将假定它为 y-m-d 格式。

      3.时间戳范围:典型的有效时间戳范围从 1901 年 12 月 13 日星期五 20:45:54 UTC 到 2038 年 1 月 19 日星期二 03:14:07 UTC,代表最小和最大 32 位有符号整数。但是对于 64 位版本的 PHP,时间戳的有效范围实际上是无限的。

      4.检查字符串是否为有效时间戳:在 strtotime 函数中作为参数提供的字符串可以提供不同版本的不同结果。 低于 5.1.0 的 PHP 将在失败时返回 -1,而更高版本将返回 false

      参考:http://php.net/manual/en/function.strtotime.php

      【讨论】:

        猜你喜欢
        • 2015-04-27
        • 2019-02-27
        • 1970-01-01
        • 2020-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-14
        相关资源
        最近更新 更多