Я хочу разобрать дату без часового пояса в JavaScript. Я пытался:
new Date(Date.parse("2005-07-08T00:00:00+0000"));
Возвращает пт 08 июля 2005 02:00:00 GMT + 0200 (центральноевропейское летнее время)
new Date(Date.parse("2005-07-08 00:00:00 GMT+0000"));
Возвращает тот же результат
new Date(Date.parse("2005-07-08 00:00:00 GMT-0000"));
Возвращает тот же результат
Я хочу разобрать время:
Без часового пояса.
Без вызова конструктора Date.UTC или новой даты (год, месяц, день).
Простая передача строки в конструктор Date (без подходов к прототипу).
Я должен продукт
Date
, а не объектString
.
Date.parse
btw и напрямую передать строку вDate
конструктор.Date
объект, чтобы получить правильный объект для сравнения дат в MongoDB:new Date(dateStart.getFullYear(), dateStart.getMonth(), dateStart.getDate())
Ответы:
Дата анализируется правильно, просто toString преобразует ее в ваш местный часовой пояс:
Объект Date в формате Javascript - это временные метки - они просто содержат количество миллисекунд с начала эпохи. В объекте Date нет информации о часовом поясе. Какую календарную дату (день, минуты, секунды) представляет эта временная метка, зависит от интерпретации (один из
to...String
методов).Приведенный выше пример показывает, что дата анализируется правильно, то есть фактически содержит количество миллисекунд, соответствующих «2005-07-08T11: 22: 33» в GMT.
источник
new Date(Date.parse("2005-07-08T11:22:33+0000"))
, дата и скопирован с помощью конструктора:new Date(dateStart.getFullYear(), dateStart.getMonth(), dateStart.getDate())
. Оба решения, разные результаты, второе правильное! Ваш ответ был полезен, только что упомянут в hunlock.com/blogs/Javascript_Dates-The_Complete_Reference . Up.У меня такая же проблема. Я получаю дату в виде строки, например: «2016-08-25T00: 00: 00», но мне нужно иметь объект Date с правильным временем. Чтобы преобразовать String в объект, я использую getTimezoneOffset:
getTimezoneOffset()
вернет эфир отрицательное или положительное значение. Это должно быть вычтено, чтобы работать в любой точке мира.источник
var userTimezoneOffset = date.getTimezoneOffset()*60000;
getTimezoneOffset()
возвращает количество минут в обратном направлении, которое вы думаете - мой часовой пояс сейчас UTC-4, ноgetTimezoneOffset()
возвращает положительное значение 240. Поэтому егоuserTimezoneOffset
следует вычесть изdate.getTime()
, а не добавить к нему.new Date('2016-08-25T00:00:00Z')
я думаю, смысл был в том, чтобы манипулироватьnew Date('2016-08-25T00:00:00Z')
так, чтобы местное время отображалось со временем 0:00, но этот код отсутствовалZ
Я столкнулся с той же проблемой, а затем вспомнил кое-что удивительное о проекте, над которым я работал, и о том, как они справились с этой проблемой. Я не понимал этого в то время, и мне было все равно, пока я сам не столкнулся с проблемой
По какой-либо причине передача даты в виде «01-02-2014» устанавливает часовой пояс на ноль и игнорирует часовой пояс пользователя. Это может быть случайностью в классе Date, но он существовал некоторое время назад и существует сегодня. И, похоже, работает кросс-браузер. Попробуйте сами.
Этот код реализован в глобальном проекте, где часовые пояса имеют большое значение, но человек, который просматривает дату, не заботился о точном моменте ее введения.
источник
2014/5/31
и ,2014/05/31
как СБ 31 мая 2014 00:00:00 GMT-0600 (Mountain летнее время) `(MDT будучи моей текущей временной зоны). С тире ... все браузеры интерпретируются2014-05-31
как пт 30 мая 2014 18:00:00 GMT-0600 (горное летнее время). Как ни странно, с2014-5-31
Chrome возвращается суббота, Firefox возвращается в пятницу, а IE11 говорит, что дата недействительна. Похоже, чтоdate.replace('-','/')
может сделать свое дело.В
Date
любом случае сам объект будет содержать часовой пояс, а возвращаемый результат является результатом преобразования его в строку по умолчанию. Т.е. вы не можете создать объект даты без часового пояса. Но вы можете имитировать поведениеDate
объекта, создавая свой собственный. Это, однако, лучше передавать в библиотеки, такие как moment.js .источник
простое решение
источник
Дата в javascript просто хранит его внутри. поэтому данные даты и времени хранятся в эпоху UTC Unix (миллисекунды или мс).
Если вы хотите иметь «фиксированное» время, которое не меняется ни в каком часовом поясе на Земле, вы можете отрегулировать время в UTC, чтобы оно соответствовало вашему текущему местному часовому поясу, и сохранить его. И при получении, в каком бы местном часовом поясе вы ни находились, он покажет скорректированное время UTC на основе того, кто его сохранил, и добавит смещение местного часового пояса, чтобы получить «фиксированное» время.
Сохранить дату (в мс)
Получить / показать дату (в мс)
Тогда ты можешь:
источник
Вы можете использовать этот код
источник
Так как это действительно проблема форматирования при отображении даты (например, отображение по местному времени), мне нравится использовать новый (ish) объект Intl.DateTimeFormat для выполнения форматирования, так как оно более явное и предоставляет больше параметров вывода:
Как показано, при установке часового пояса в «UTC» он не будет выполнять локальные преобразования. В качестве бонуса, он также позволяет создавать более полированные результаты. Вы можете прочитать больше об объекте Intl.DateTimeFormat из Mozilla - Intl.DateTimeFormat .
Редактировать:
Та же функциональность может быть достигнута без создания нового
Intl.DateTimeFormat
объекта. Просто передайте параметры языка и даты непосредственно вtoLocaleDateString()
функцию.источник
Просто общая заметка. способ сохранить его гибким.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
Мы можем использовать getMinutes (), но он возвращает только один номер за первые 9 минут.
источник
(new Date().toString()).replace(/ \w+-\d+ \(.*\)$/,"")
Это будет иметь выход: вт 10 июля 2018 19:07:11
(new Date("2005-07-08T11:22:33+0000").toString()).replace(/ \w+-\d+ \(.*\)$/,"")
Это будет иметь выход: пт 08 июля 2005 04:22:33
Примечание: время возврата будет зависеть от вашего местного часового пояса
источник
Это решение, которое я придумал для этой проблемы, которое работает для меня.
используемая библиотека: моменты с простым javascript классом Date.
Шаг 1. Преобразовать строковую дату в момент объекта (PS: момент сохраняет исходную дату и время, пока
toDate()
метод не вызывается):const dateMoment = moment("2005-07-08T11:22:33+0000");
Шаг 2. Извлечение
hours
иminutes
значения из ранее созданного момента объекта:Шаг 3. Преобразование момента в дату (PS: это изменит исходную дату в зависимости от часового пояса вашего браузера / компьютера, но не беспокойтесь и прочитайте шаг 4.):
Шаг 4. Вручную установите часы и минуты, извлеченные на шаге 2.
Шаг 5.
dateObj
Теперь будет отображать исходную дату без разницы часовых поясов. Даже изменения летнего времени не будут влиять на объект даты, поскольку мы вручную устанавливаем исходные часы и минуты.Надеюсь это поможет.
источник
Есть некоторые присущие проблемы с разбором даты, которые, к сожалению, по умолчанию не решены.
-Читаемые человеком даты читаются с неявным часовым поясом. -В Интернете
есть много широко используемых форматов дат, которые неоднозначны.
Чтобы решить эти проблемы легко и просто, нужна функция, подобная этой:
Я искал это, но ничего такого не нашел!
Итак, я создал: https://github.com/zsoltszabo/timestamp-grabber
Наслаждайтесь!
источник