#javascript #node.js
#javascript #node.js
Вопрос:
Как преобразовать дату типа ‘2021-06-01T11:17:00-07:00’ в стандарт ISO? Что это за формат?
let date = new Date('2021-06-01T11:17:00-07:00');
console.log(date.getHours() " :" date.getMinutes());
Я должен получить 11:17, но я возвращаюсь 23:47
Итак, что-то пошло не так в понимании правильного формата даты?
Для обратного проектирования,
Если я преобразую дату, мою ожидаемую дату, которая равна «2021-06-01 11:17:00», в ИзоСтринг, тогда значение, которое я получаю, равно 2021-06-01T05:47: 00.000Z, что не равно 2021-06-01T11:17:00-07:00
PS — Итак, из комментариев я узнал, что этот формат находится в MST, что на 7 часов отстает от UTC
Комментарии:
1. вы пробовали
new Date('2021-06-01T11:17:00-07:00')
?2. Что вы подразумеваете под «преобразованием в стандарт ISO» ? Ваша строка, похоже, является допустимым форматом ISO 8601
3. Когда я пытаюсь извлечь часы и минуты из этой даты, это не дает ожидаемого результата, поэтому либо этот формат даты неверен, либо мое понимание должно быть уточнено
4. Вы увидите дату в своем часовом поясе. Данная дата имеет часовой пояс, который равен MST (горное стандартное время), и вы, вероятно, находитесь в Индии, в часовом поясе 05:30. Когда в Солт-Лейк-Сити 11:17, в Нью-Дели 23:47. Так что это действительно зависит от того, хотите ли вы видеть время в MST … не так ли?? Вы проясните ситуацию, когда покажете код , с помощью которого вы визуализируете свою дату.
5. Спасибо за ваш ответ. Я хочу видеть это в индийском часовом поясе. Итак, как я могу получить дату из MST в IST?
Ответ №1:
На входе указывается часовой пояс, поэтому он указывает время, в которое в Солт-Лейк-Сити оно составляет 11:17. Тот же момент соответствует 23:47 в Нью-Дели, который является вашим часовым поясом.
Поэтому, когда вы укажете JavaScript для чтения входных данных, он будет знать, что это спецификация по горному стандартному времени (-07:00), и сохранит дату в UTC. Когда вы выводите дату, как вы это делаете, JavaScript будет использовать вашу локаль и выводить ее как 23:47, что соответствует тому же моменту, который указан на входе.
Если вы хотите, чтобы время выводилось как 11:17, то, очевидно, вы не хотите считать, что это местное время в Солт-Лейк-Сити, но игнорируйте это и просто считайте, что это 11:17 в вашем часовом поясе.
В этом случае вам следует изменить ввод и удалить спецификацию часового пояса:
let date = new Date('2021-06-01T11:17:00'); // No time zone specified -> is interpreted as local time
console.log(date.getHours() " :" date.getMinutes());
Если входная строка является переменной, вы можете удалить часовой пояс, сохранив только первые 19 символов ввода, прежде чем передавать его в Date
конструктор.
Но имейте в виду, что когда вы удаляете часовой пояс, вы фактически меняете временную спецификацию во входных данных на другую. Это уже не то же время.
Комментарии:
1. Спасибо за разъяснение. Высоко ценится.
Ответ №2:
Вы пробовали использовать ванильный класс даты javascript? Должна быть возможность передать это в конструктор, а затем преобразовать его в нужный формат. Например: const date2 = новая дата (‘1995-12-17T03:24:00’);
См https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
Вы также можете попробовать использовать библиотеку Moment в Javascript, хотя многие люди пытаются отойти от этого.