#javascript #mysql #utc
#javascript #mysql #utc
Вопрос:
Я провел бесконечный поиск, но не могу найти решение, которое работает для меня. Я сохраняю записи в базе данных mysql, которая регистрирует время ее создания по UTC (UTC_TIMESTAMP()). Мне нужно представить данные пользователю (используя JavaScript) в его местное время. Я пробовал следующее, и это не работает:
JavaScript:
function localizeDateStr(dateToConvert,divId){
newDate = new Date(dateToConvert);
document.getElementById(divId).innerHTML = newDate.toString();
}
HTML:
<div id="<?php echo $divId ?>" class="td-short"></div>
<script type="text/javascript">window.onload = localizeDateStr('<?php echo $entryTime;?>','<?php echo $divId;?>');</script>
Дата UTC, которая хранится в базе данных, совпадает с отображаемой датой.Я не вижу преобразованную дату. Будем признательны за любую помощь. Пожалуйста, сообщите.
Комментарии:
1. Что точно находится в
dateToConvert
? Пожалуйста, предоставьте пример ввода.2. Примером может служить ‘2019-03-20 17:43:53’.
3. на экране отображается следующее: Ср. 20 марта 2019 г. 17:43:53 GMT-06.00 (горное дневное время)
Ответ №1:
Разбор строки через Date
конструктор (или через Date.parse
) очень чувствителен к формату входной строки. Учитывая значение, которое вы указали в комментариях '2019-03-20 17:43:53'
, большинство реализаций будут интерпретировать это в терминах местного времени. Однако, спецификация не требует соответствия этому, поскольку она описывает только очень конкретный формат. Все остальное зависит от реализации.
Предполагая, что ваши строки последовательно представлены в этом формате, и вы хотите, чтобы он интерпретировался как UTC, ваши варианты:
-
Настройте строку так, чтобы она включала
T
разделитель между частями даты и времени и заканчивалась наZ
для обозначения UTC.var newDate = new Date(dateToConvert.replace(' ','T') 'Z');
-
Проанализируйте строку самостоятельно:
var parts = dateToConvert.split(/[-: ]/g).map((x) => parseInt(x)); parts[1]--; // Months are 0-11, so adjust var newDate = new Date(Date.UTC(...parts));
-
Используйте библиотеку, подобную Luxon:
var dt = luxon.DateTime.fromFormat(dateToConvert, 'yyyy-MM-dd HH:mm:ss', { zone: 'UTC' }); var newDate = dt.toJSDate();
или момент:
var newDate = moment.utc(dateToConvert).toDate();
Комментарии:
1. Замечательно. Спасибо. Я выбрал var newDate = новая дата (dateToConvert.replace(‘ ‘,’T’) ‘Z’);. У вас есть предпочтения в отношении того, какое решение выбрать?
2. Если вы делаете что-то значительное, я бы порекомендовал библиотеку, подобную Luxon.