Вопрос по поводу кода - работаю с датой. Изначальный формат подставляю в Date через конструктор.
var a = “2019-03-12T10:00”
d = new Date(a)
console.log(d);
VM2484:4 Tue Mar 12 2019 12:00:00 GMT+0200 (EET)
получаю + 2 часа для своего часового пояса т.к. согласно описанию на javascript.ru время берется в GMT+0, соответственно при выводе будет +2 часа (для моего времени)
но уже если Т заменить на пробел, получаю это:
a = “2019-03-12 10:00”;
d= new Date(a);
console.log(d);
VM2375:4 Tue Mar 12 2019 10:00:00 GMT+0200 (EET)
как видно +2 часа не добавляется. И еще интересней - на скрине - выполнил на ПК соседа. Формат изначальной даты с Т, но результат как без Т на моем компе.
Как так? Кому верить и почему браузер/JS/интерпритатор/конструктор даты или console.log так себя ведет. Кому верить :) Заранее спасибо! Скрины ниже
В стандарте не прописано поведение для случая когда дата-время разделены пробелом. Поэтому каждый браузер интерпретирует пробел по-своему, и поведение получается разным.
Cпасибо. На входе я получаю искомое представление даты в таком виде “2019-03-04T09:30”
(это приходит извне) - я так понимаю это не совсем по формату т.к. отсутствуют секунды либо же буква Z (в документации так:
2019-03-01T14:16:20+00:00
2019-03-01T14:16:20Z
20190301T141620Z
)
и в этом причина необычного поведения ?
я прочитал сейчас про getUTCHours() , getUTCMinutes() - с этими методами получаю то что мне нужно. Т.е. время из “2019-03-04T09:30” без добавления +2 на разницу часовых поясов.
Можно ли обойтись этим как костылем, если разработчику который отдает “2019-03-04T09:30” поменять тяжелее из-за dependencies или же он вообще отсутствует?
Это строка валидна согласно стандарту. Вот тут описание как может быть описано время ISO 8601 - Wikipedia
Нет. Проблема из-за убирания T из строки.
Если изначальные строки одинаковые и содержат T, а не пробел, то дело в том какой часовой пояс выбран на каждом из компьютеров. При попытке привести дату к строковому виду, js будет смотреть на настройки компьютера.
А, наверное не ясно что когда дата приводится к строке, то она приводится согласно часовому поясу владельца браузера (если настроено корректно). Строка которая заходит аргументом в Date считается датой в UTC.
Значит тебе нужно строковое представление даты в UTC формате (скорее всего в UTC дата и приходит).
Сойдут любые методы которые работают с датой в контексте UTC. Например getUTCHours или toUTCString().