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

时间:2012-08-26 18:31:28

标签: php mysql

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

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

对于downvoted / close请求此问题的人:

当我试图将1345108443790(我从第三方网站获得此值)转换为DateTime时,我得到了奇怪的结果,但经过多次尝试后,@ Truth的建议在修剪了最后3位后知道了(可能)是微秒?)然后在函数中传递它实际上解决了它并给出了正确的结果。这里需要学习的东西,只需点击一下即可!

3 个答案:

答案 0 :(得分:2)

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

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

工作示例:

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

答案 1 :(得分:2)

  

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

此格式包含在ISO 8601 International Standard中,尽管不是特别常用的示例。

除此之外:建议(在标准中)秒的分数前面有逗号而不是点。


  

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

通常情况下,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 time,但以毫秒为单位。基本算术将以秒为单位为您提供Unix时间,您可以使用DateTime格式创建@1234567890对象。

$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');

答案 2 :(得分:1)

我同意@Truth's recommendation使用PHP的DateTime对象,因为从v5.2.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