将字符串(ISO格式)转换为日期 PHP

4

我想在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 仍然失败。

如有建议,不胜感激。


2
首先,ISO8601日期格式带有毫秒只有一个:YYYY-MM-DDThh:mm:ss[.sss]。因此,您的字符串不是ISO861。 - Sergey Khalitov
4个回答

3
您在此处传递的日期格式与您在函数内部比较的日期格式不一致,应该像这样:
$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
你可以尝试像这样:-
<?php

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

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

?>

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

参考资料:

将 ISO 8601 格式转换为 PHP 中的 d M Y

注意:您可以根据自己的需要更改日期格式,例如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”时,它会给我一个负数。 - bobthegoalie
我看到你的链接上它可以工作。当我把date()拿出来,放入我的日期2016-12-20T03:24:59.000Z时,它输出2017-07-10MDT13:57:37.000-21600。所以当我使用strtotime()函数时,它会给出一个负数,因为该函数不喜欢我的日期。 - bobthegoalie
运行 date("2016-12-20T03:24:59.000Z") 时,输出为 2017-07-10MDT13:57:37.000-21600。这就是为什么我从 date("d M, Y",strtotime(date($time))); 中得到了一个负数的原因。 - bobthegoalie
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - bobthegoalie
@bobthegoalie 我能说什么呢。也谢谢你抽出时间。 - Alive to die - Anant
显示剩余2条评论

0

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

在使用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. 时间戳范围:典型的有效时间戳范围从Fri, 13 Dec 1901 20:45:54 UTC到Tue, 19 Jan 2038 03:14:07 UTC,表示最小和最大32位有符号整数。但是对于64位版本的PHP,时间戳的有效范围几乎是无限的。

4. 检查字符串是否为有效时间戳:在strtotime函数中提供的参数字符串可能会因版本不同而产生不同的结果。 PHP 5.1.0之前的版本在失败时将返回-1,而后续版本将返回false

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


0
$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

希望它能有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接