PHP日期时间格式-2012-08-16T21:14:03.447


PHP date time format - 2012-08-16T21:14:03.447?

PHP中的日期时间是什么格式2012-08-16T21:14:03.447?如何将其转换为时间戳,反之亦然?

我有一个时间戳格式1345108443790,如何获得日期时间?

对于拒绝投票/关闭请求的人,请回答此问题:

当我试图将1345108443790(我从第三方网站得到这个值)转换为DateTime时,我得到了一个奇怪的结果,但经过多次尝试和@Truth的建议,我知道在修剪最后3位数字(可能是微秒?)并将其传递给函数后,实际上解决了这个问题,并给出了正确的结果。点击这里学习,选民!

这类似于ISO 8601(虽然缺少时区),也就是日期/时间戳的标准。

使用strtotime()可以正确解析它。您可能还需要考虑DateTime对象。

工作示例:

$ts = strtotime("2012-08-16T21:14:03.447");
echo date("H:i:s Y-m-d", $ts);

这个日期时间在PHP中是什么格式2012-08-16T21:14:03.447?

这种格式包含在ISO 8601国际标准中,尽管不是一个特别常用的示例。

旁白:建议(在标准中)秒的分数前面加一个逗号,而不是一个点


如何将其转换为时间戳,反之亦然?

通常情况下,使用strtotime()DateTime类。

$subject = '2012-08-16T21:14:03.447';
echo date('r', strtotime($subject));
// or
$datetime = new DateTime($subject);
echo $datetime->format('r');

我有一个时间戳格式1345108443790,如何获取日期时间?

这是Unix时间,但使用毫秒作为单位。基本算术会给你一个Unix时间(以秒为单位),从中你可以使用@1234567890格式创建一个DateTime对象。

$subject = 1345108443790;
$unixtime = (int) ($subject / 1000);
echo date('r', $unixtime);
// or
$datetime = new DateTime("@$unixtime");
echo $datetime->format('r');

如果您需要毫秒精度,那么您可以使用DateTime::createFromFormat()

$subject = 1345108443790;
$unixtime = (int) ($subject / 1000);
$millis   = $subject % 1000;
$datetime = DateTime::createFromFormat('U u', "$unixtime $millis");
echo $datetime->format('r u');

我同意@Truth的建议,使用PHP的DateTime对象,因为自v5.2以来,这样可以毫无问题地处理微秒:

$dt = new DateTime('2012-08-16T21:14:03.447');
$timestamp = $dt->format('U.u');                  // 1345151643.447000
$timestrng = $dt->format('Y-m-d'TH:i:s.u');       // 2012-08-16T21:14:03.447000