PHP中的日期时间到时间戳,以毫秒为单位

时间:2016-03-21 04:54:59

标签: php timestamp milliseconds

我想从输入' 2016-03-22 14:30'创建一个以毫秒为单位的时间戳。 指定的时区也应该是澳大利亚/悉尼。

我尝试了不同的方法,但似乎都没有。

有人能帮帮我吗?我真的很挣扎。

8 个答案:

答案 0 :(得分:9)

非常自我解释的代码,所以我不会说太多。

date_default_timezone_set('Australia/Sydney'); // set timezone
$yourdate = '2016-03-22 14:30';
$stamp = strtotime($yourdate); // get unix timestamp
$time_in_ms = $stamp*1000;

如果要正确显示它。

echo number_format($time_in_ms, 0, '.', '');

答案 1 :(得分:1)

试试这个会起作用

<?php
$date = new DateTime('@'.strtotime('2016-03-22 14:30'), new DateTimeZone('Australia/Sydney'));

echo "Timestamp in Australia/Sydney: ".$date->format('Y-m-d H:i:sP');
echo "<br/>";
echo "Timestamp in miliseconds Australia/Sydney: ".strtotime($date->format('Y-m-d H:i:sP'));
?>

输出:

Timestamp in Australia/Sydney: 2016-03-22 18:30:00+00:00
Timestamp in miliseconds Australia/Sydney: 1458671400

答案 2 :(得分:1)

您可以使用createFromFormat DateTime方法,或者更好,DateTimeImmutable,同时将时区作为第三个参数。这样您就不需要依赖默认时区了,这绝不是一个好主意

$datetime = DateTimeImmutable::createFromFormat('Y-m-d H:i', '2016-03-22 14:30', new DateTimeZone('Australia/Sydney'));
echo $datetime->getTimestamp();
echo $datetime->format(DateTime::ISO8601);

你也可以将它转换为另一个时区,请注意它产生了新的DateTimeImmutable和原始的左边不变:

echo $utcTzDatetime = $date->setTimezone(new DateTimeZone('UTC'));
echo $utcTzDatetime->format(DateTime::ISO8601);
echo $datetime->format(DateTime::ISO8601);

<强> UPD:

如果格式未修复,您可以让DateTime猜它:

new DateTimeImmutable($time, new DateTimeZone('Australia/Sydney'));

但请注意,如果$time字符串包含时区或偏移量,例如&#39; 2016-03-22T14:30-0500&#39;,它将优先于时区参数,并将导致不同的时间戳!

答案 3 :(得分:0)

date_default_timezone_set("Australia/Sydney");
echo strtotime('2016-03-22 14:30') * 1000;

输出:1458617400000

答案 4 :(得分:0)

如果您使用的是Carbon包,则可以使用

Carbon::parse('2009-09-22 16:47:08.128')->micro

这将以毫秒为单位返回您的时间。您可以将其除以1000,然后将其与以秒为单位的同一日期的纪元时间戳连接起来。
只要确保如果日期格式没有毫秒部分,那么您将得到0以毫秒为单位,并且在连接之前必须用额外的零填充该0。

答案 5 :(得分:0)

只需尝试此方法

<?php
$time = microtime(true);
$datetime = new DateTime();
$datetime->setTimestamp($time);
$format = $datetime->format('Y-m-d H:i:s');
var_dump($format);
?>

答案 6 :(得分:0)

对于那些想如何从DateTime中获取毫秒级时间戳的人,这是我想出的:

$date = new DateTimeImmutable();

$timestampMs = (int) ($date->getTimestamp() . $date->format('v'));

这将获得时间戳记(以秒为单位)并附加毫秒('v' format)。

https://3v4l.org/UoZsL

答案 7 :(得分:0)

带有 * 1000 的答案仅格式化输出,但未捕获精度。

使用 DateTime->format,其中 U 代表秒,u 代表微秒,v 代表毫秒:

<?php
// pass down `now` or a saved timestamp like `2021-06-15 01:03:35.678652`
$now = new \DateTime('now', new \DateTimeZone('UTC'));
// or something like:
$now = DateTime::createFromFormat('U.u', number_format(microtime(true), 6, '.', ''), new \DateTimeZone('UTC'));

// in microseconds:
$now_us = (int)$now->format('Uu');
// e.g.: 1623719015678652


// in milliseconds:
$now_ms = (int)$now->format('Uv');
// e.g.: 1623719015678