-1

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

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

对于投票/关闭请求此问题的人:

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

4

3 回答 3

2

这类似于 ISO 8601(但缺少时区),即日期/时间戳的标准。

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

工作示例:

$ts = strtotime("2012-08-16T21:14:03.447");
echo date("H:i:s Y-m-d", $ts);
于 2012-08-26T18:33:36.933 回答
2

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 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');
于 2012-08-26T19:54:58.570 回答
1

我同意@Truth建议使用 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
于 2012-08-26T20:01:28.453 回答