@bobs32

Как правильно трансформировать время?

Имеется функция:
var date = '2017-05-16 13:45';
console.log(dateTransform(date));

function dateTransform(dateStr) {
    var dateT = dateStr.split(' ');
    var dateArr = dateT[0].split('-');
    var timeArr = dateT[1].split(':');
    var yyyy = parseInt(dateArr[0]);
    var mm = parseInt(dateArr[1]) - 1;
    var dd = parseInt(dateArr[2]);
    var h = parseInt(timeArr[0]);
    var m = parseInt(timeArr[1]);
    var s = 0;
    var newDate = new Date(yyyy, mm, dd, h, m, s);
    return newDate;
}

Код выводит 2017-05-16T10:45:00.000Z, ошибаясь во времени. Как это исправить?

ps запускаю через node на OSX
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 5
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
2017-05-16 13:45 MSK === 2017-05-16T10:45:00.000Z
console.log(new Date(Date.parse('2017-05-16 13:45')))
// Date Tue May 16 2017 13:45:00 GMT+0300 (Москва, стандартное время)

Ваш код у меня в консоли тоже выводит
// Date Tue May 16 2017 13:45:00 GMT+0300 (Москва, стандартное время)
Ответ написан
Комментировать
scottparker
@scottparker
добавьте часовой пояс
Ответ написан
Комментировать
IonDen
@IonDen
JavaScript developer. IonDen.com
А зачем вам такие сложные преобразования? Дата в вашем формате прекрасно парсится нативно:
const date = '2017-05-16 13:45';
const parsedDate = new Date(date);
console.log(parsedDate); // 2017-05-16T13:45:00.000Z
Ответ написан
Aetae
@Aetae Куратор тега JavaScript
Тлен
Z на конце - это отсутствие часового пояса, что трактуется по стандарту UTC - всемирному координированному времени.
По умолчанию же new Date() задаёт дату в часовом поясе системы. (у вас +3 - скорее всего MSK).
Если нужно время именно в UTC - поменяйте:
var newDate = new Date(yyyy, mm, dd, h, m, s);
на:
var newDate = new Date(Date.UTC(yyyy, mm, dd, h, m, s));

Но скорее всего это вам не нужно.
Ответ написан
Комментировать
john36allTa
@john36allTa
alien glow of a dirty mind
Для любителей экзотики и уверенных в едином и правильном формате входных данных:
date.match(/\d+/g).map(Number) // Array(2017,  5, 16, 13, 45)

Если не уверенны в формате, можно просто задать более точный шаблон
let regexpr = /(\d{4})-(\d{2})-(\d{2})\s(\d\d):(\d\d)/

Но получится тоже самое что и у Вас по сути
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы