我有来自mysql的时间戳,如:" 2016-08-03 11:11:41.04000" 。 此时间戳是CONCAT(' date',''' time')选择的结果。
我需要将PHP的时间戳转换为仅数字时间戳,以便我可以在javascript中使用时间戳,并保留毫秒精度。
关于此主题的其他问题仅涵盖没有MySQL毫秒片段的日期,或者只是建议使用strtotime('' datestring)* 1000,它会失去毫秒精度。
需要保留毫秒精度,因此可以在javascript中使用。
答案 0 :(得分:2)
您可以使用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());
答案 1 :(得分:1)
我建议如下:
在JS中使用它时,在PHP中打印concatstring。 您可以使用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
中填写这些参数(年,月,毫秒等)答案 2 :(得分:1)
使用此简单的PHP代码将毫秒格式的日期从PHP格式转换为具有毫秒级的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
答案 3 :(得分:0)
我已经使用了@feeela和@ sietse85的建议。
在PHP中:
$datetime = new \DateTime('2016-08-03 11:11:41.04000');
$timestamp = $datetime->format('YmdHisu'); // 2016080311114104000
在javascript中:
/**
* 2016080311114104000
* @param string yyyymmddhhiissuuuuuu
*/
function dateFromCustomTimestamp(date) {
date = date.toString();
return new Date(
date.substring(0,4),
date.substring(4,6),
date.substring(6,8),
date.substring(8,10),
date.substring(10,12),
date.substring(12,14),
date.substring(14,20)/100
);
}
/**
* 2016080311114104000
* @param string yyyymmddhhiissuuuuuu
*/
function dateFromCustomTimestamp(date) {
date = date.toString();
return new Date(
date.substring(0,4),
date.substring(4,6),
date.substring(6,8),
date.substring(8,10),
date.substring(10,12),
date.substring(12,14),
date.substring(14,20)/100
);
}
不是很好,但如果解决了转换时间戳的数字表示的问题,从mysql =&gt;保留的毫秒数php =&gt; javascript。