Преобразование времени MySQL за миллисекунды в метку времени javascript с переполнением стека

У меня есть отметка времени из mysql, например: «2016-08-03 11: 11: 41.04000».
Эта временная метка является результатом выбора CONCAT (‘date’, », ‘time’).

Мне нужно преобразовать метку времени с PHP в метку времени только для чисел, чтобы я мог использовать метку времени в javascript с сохранением точности в миллисекундах.

Другие вопросы, касающиеся этой темы, охватывают только даты без фрагмента миллисекунд MySQL или просто предлагают strtotime (» datestring) * 1000, который теряет точность в миллисекундах.

Точность в миллисекундах должна быть сохранена, чтобы ее можно было использовать в javascript.

1

Решение

Вы можете использовать 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());
2

Другие решения

Я бы предложил следующее:

Напечатайте вашу конкатстрину в 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

1

Я использовал оба предложения @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.

0

Используйте этот простой код 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
0
По вопросам рекламы [email protected]