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

将字符串(ISO)转换为日期PHP,php,datetime,Php,Datetime,我试图在PHP中将字符串转换为日期。我收到的字符串已格式化:- "2016-07-16T1:22:04.324+1030" 或 当我尝试这个的时候 $newDate = DateTime::createFromFormat("c", $exp); $expirationDate = $newFormat->getTimestamp(); DateTime失败。即使我尝试 $newDate = DateTime::createFromFormat(ISO8601, $exp; $expi

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

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

当我尝试这个的时候

$newDate = DateTime::createFromFormat("c", $exp);
$expirationDate = $newFormat->getTimestamp();
DateTime
失败。即使我尝试

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


非常感谢您的建议。

您在此传递的
日期格式
不是您在功能中比较的格式,应该是

$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

希望对您有所帮助

您可以这样尝试:-

<?php

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

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

?>

产出:-2016年7月16日:-

参考资料:


注意:-您可以根据自己的方便更改日期格式。像
dmdyh:i:sot
。我在PHP5.5.4、PHP5.5.14、PHP7上检查了这段代码

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

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

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

2。使用分隔符:使用分隔符可能会出现意外输出。分隔符斜杠(“/”)表示日期为美式格式,即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。检查字符串是否为有效的时间戳:在strotime函数中作为参数提供的字符串可以提供不同版本的不同结果。 5.1.0之前的PHP在出现故障时将返回-1,而更高版本将返回false


参考资料:

首先,带毫秒的ISO8601日期格式只有一种:
YYYY-MM-DDThh:MM:ss[.sss]
。因此,您的字符串不是ISO861。这对于这种格式的字符串非常有效
“2016-07-16T1:22:04.324+1030”
,但当输入
“2016-12-20T03:24:59.000Z”时,它会给我一个负数
我看到它在您的链接上起作用。当我只取出日期并放入日期时,它会输出日期,所以当我取出时间时,它会给出一个负数,因为该函数与我的日期不一样。当运行日期(“2016-12-20T03:24:59.000Z”)时
输出是
2017-07-10MDT13:57:37.000-21600
这就是为什么我从
日期中得到一个负数(“d M,Y”,strtime(日期($time))你是对的。我不知道为什么在我的代码中,当它在其他地方工作时,它会输出那个奇怪的日期。为什么要在已经格式化的日期时间上运行
date()
函数<代码>T
部分在本例中替换为时区缩写。。。
$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
<?php

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

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

?>