使用PHP将MySQL时间(以毫秒为单位)转换为javascript时间戳

时间:2016-08-03 09:52:57

标签: javascript php mysql timestamp milliseconds

我有来自mysql的时间戳,如:" 2016-08-03 11:11:41.04000" 。 此时间戳是CONCAT(' date',''' time')选择的结果。

我需要将PHP的时间戳转换为仅数字时间戳,以便我可以在javascript中使用时间戳,并保留毫秒精度。

关于此主题的其他问题仅涵盖没有MySQL毫秒片段的日期,或者只是建议使用strtotime('' datestring)* 1000,它会失去毫秒精度。

需要保留毫秒精度,因此可以在javascript中使用。

4 个答案:

答案 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。