Преобразование mysql UTC_TIMESTAMP в CST и MST с использованием JavaScript - PullRequest
0 голосов
/ 21 марта 2019

Я провел бесконечный поиск, но не могу найти решение, которое работает для меня. Я храню записи в базе данных 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 Ответ

1 голос
/ 21 марта 2019

Анализ строки с помощью конструктора 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();
    
...