У меня нет ответа от спецификации, но я могу догадаться. @charlietfl находится на правильном пути - 08/30/2018
- это специфический для США (или иначе «локальный») формат - он не признан на международном уровне, и, в частности, большинство европейских стран обращают порядок дня и месяца в обратном порядке. Таким образом, если вы переводите время в локальный формат, это предполагает, что вы не знаете ничего лучше, и просто устанавливает часовой пояс на любой системный часовой пояс в браузере.
Если вы используете нормализованную строку, которая является признанной на международном уровне, то она не предполагает, какой часовой пояс вы имеете в виду, когда вводите ее, она просто устанавливает ее в UTC. Если вы хотите указать часовой пояс вашего сервера или часовой пояс пользователя, вы должны будете указать его.
Я рекомендую, если важен часовой пояс, указывать его при инициализации объекта (даже если вы хотите UTC), потому что всегда лучше уменьшить неоднозначность. В частности, в этом случае ваш браузер использует тихоокеанское время, потому что, по-видимому, вы находитесь на Западном побережье. Мой использует восточный, потому что я на восточном побережье, поэтому временная метка отличается для первого случая - она использует мое местное время. Международно признанный формат даты - UTC для нас обоих.
EDIT:
Я не был удовлетворен догадками. Согласно документам , Date()
использует метод Date.parse()
для анализа строки и распознавания, какая дата требуется - якобы она соответствует спецификациям здесь и здесь - здесь они оказываются лишь минимально полезными, не тратя больше времени, чем я желаю.
Документация для Date.parse()
указывает, что она принимает входное значение и возвращает миллисекунды с начала эпохи.
Вот соответствующий бит для вас от Date.parse()
:
Учитывая строку даты "7 марта 2014", parse () предполагает местный часовой пояс, но учитывая формат ISO, такой как "2014-03-07", он будет принимать часовой пояс UTC