我有来自mysql的时间戳,比如:"2016-08-03 11:11:41.04000“。此时间戳是CONCAT('date',‘','time') select的结果。
我需要用PHP将时间戳转换为仅数字的时间戳,这样我就可以在保留毫秒精度的情况下使用javascript中的时间戳。
关于这个主题的其他问题只涉及没有MySQL毫秒片段的日期,或者简单地建议strtotime(''datestring) * 1000,这会失去毫秒精度。
毫秒精度需要保留,这样才能在javascript中使用。
发布于 2016-08-03 17:59:52
您可以使用DateTime对象。构造函数几乎可以使用任何日期/时间格式。
$datetime = new DateTime('2016-08-03 11:11:41.04000');
echo $datetime->getTimestamp();
// output: 1470215501正如下面的注释所述,使用getTimestamp将丢失毫秒部分,因为UNIX时间戳是以秒为单位的,不能存储秒的分数。如果需要,您可以考虑使用自己的时间戳语法。例如,输出每个数字之间没有任何分隔符的日期和时间:
$datetime = new DateTime('2016-08-03 11:11:41.04000');
echo $datetime->format('YmdHisu');
// output: 20160803111141040000另一方面,JavaScript能够直接解析包含毫秒的日期时间字符串。因此,您也可以将输入直接传递给JS,而不需要在PHP中转换它。
var datetime = new Date('2016-08-03 11:11:41.04000');
console.log(datetime.toJSON());发布于 2016-08-03 18:37:33
我会提出以下建议:
在JS中使用时,在PHP中打印连接字符串。您可以使用JS Date对象来设置正确的保留毫秒的时间。下面是对Date对象的引用:http://www.w3schools.com/jsref/jsref_obj_date.asp
总之
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);让PHP在JS中填充这些参数(年、月、毫秒等
发布于 2018-10-16 08:10:19
使用这个简单的PHP代码将带有毫秒的日期从PHP格式转换为带有keep毫秒的JS时间戳格式。
将2016-08-03 11:11:41.040转换为1470206501040
<?php
date_default_timezone_set('UTC');
$date = '2016-08-03 11:11:41.040';
$date = DateTime::createFromFormat('Y-m-d H:i:s.u', $date);
$ts_micro = (float) ($date->getTimestamp() . '.' . $date->format('u'));
$ts_mili = (float) ($ts_micro * 1000);
echo round($ts_mili); //result: 1470206501040对于测试,您可以使用JS将1470206501040反向转换为2016-08-03T11:11:41.040Z时间:
var d = new Date(1470222701040);
var n = d.toISOString();
document.write(n); //result: 2016-08-03T11:11:41.040Z
https://stackoverflow.com/questions/38740204
复制相似问题