2016-08-03 138 views
0

我从mysql中获取时间戳,例如:“2016-08-03 11:11:41.04000”。 此时间戳是CONCAT('date','','time')选择的结果。使用PHP将毫秒数转换为javascript时间戳

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

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

毫秒精度需要保留,以便它可以在JavaScript中使用。

回答

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

这会损失毫秒精度。 – Marvanni

1

我建议如下:

使用JS里面,当它打印您concatstring在PHP。 您可以使用JS Date对象来设置保留毫秒的正确时间。下面是日期对象的引用: http://www.w3schools.com/jsref/jsref_obj_date.asp

总之

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 

让PHP填写

0

我已经使用这些参数(年,月,毫秒等),您的JS里面两个建议@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 
    ); 
} 

不怎么样,但如果解决问题的时间戳的数值表示形式转换与从MySQL =保留毫秒> php => javascript。

+0

很高兴你解决了,解决方案可能不是最亲密的,但现在它的作品,你也可以尝试改进代码:) – sietse85

+0

那么,该方法是可读的和自我解释,目前我没有看到任何改进.. 。 – Marvanni