Как преобразовать дату типа ‘2021-06-01T11:17:00-07:00’, чтобы получить дату и время для определенного местоположения (Нью-Дели) в javascript?

#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, хотя многие люди пытаются отойти от этого.