У меня есть отметка времени из mysql, например: «2016-08-03 11: 11: 41.04000».
Эта временная метка является результатом выбора CONCAT (‘date’, », ‘time’).
Мне нужно преобразовать метку времени с PHP в метку времени только для чисел, чтобы я мог использовать метку времени в javascript с сохранением точности в миллисекундах.
Другие вопросы, касающиеся этой темы, охватывают только даты без фрагмента миллисекунд MySQL или просто предлагают strtotime (» datestring) * 1000, который теряет точность в миллисекундах.
Точность в миллисекундах должна быть сохранена, чтобы ее можно было использовать в javascript.
Вы можете использовать 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());
Я бы предложил следующее:
Напечатайте вашу конкатстрину в PHP при использовании ее внутри вашего JS.
Вы можете использовать объект Date JS для установки правильных миллисекунд, сохраняющих время. Вот ссылка на объект Date:
http://www.w3schools.com/jsref/jsref_obj_date.asp
Короче
var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);
Пусть PHP заполнит эти параметры (год, месяц, миллисекунды и т. Д.) Внутри вашего 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
);
}
[/ NOEDIT]
Не очень хорошо, но если решает проблему для преобразования числового представления отметки времени с миллисекундами, сохраненными из mysql => php => javascript.
Используйте этот простой код 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
Для теста вы можете обратное преобразование 1470206501040
в 2016-08-03T11:11:41.040Z
время с JS:
var d = new Date(1470222701040);
var n = d.toISOString();
document.write(n); //result: 2016-08-03T11:11:41.040Z