Javascript: ОШИБКА RangeError: недопустимое значение времени

#javascript

#javascript

Вопрос:

Ниже приведен мой код.

 let a = "26-Jan-2021 06:02 PM PST";

let d = "27-Jan-2021 07:32 AM IST";

let b = new Date(a).toString();

let c = new Date(a).toISOString();

console.log(c);

let e = new Date(d).toISOString();

console.log(e);
 

Вывод:

 "2021-01-27T02:02:00.000Z"

"Invalid time value"
 

Вопрос: В чем разница между тем, как JavaScript интерпретирует переменные a и d, что он выдает такие разные выходные данные?

Комментарии:

1. Попробуйте использовать Markdown, чтобы ваш код стал читаемым.

Ответ №1:

Создание объекта Date из строки даты анализирует форматы, распознанные RFC 2822. Хотя он принимает PST в качестве допустимого (хотя и устаревшего) часового пояса для «Тихоокеанского стандартного времени», он не принимает IST в качестве допустимого часового пояса в пределах метки времени.

Вместо этого вы хотели бы заменить IST на GMT 0530 или UTC 0530 (что означает среднее время по Гринвичу / Всемирное координированное время 5 часов 30 минут, определение для стандартного времени Индии):

 let c = new Date("26-Jan-2021 06:02 PM GMT 0530").toISOString()
console.log(c) // => '2021-01-26T12:32:00.000Z'
 

Ответ №2:

Насколько я понимаю, new Date() конструктор для строки временных меток принимает временные метки, совместимые с IETF RFC 2822. На странице 31 RFC перечислены приемлемые часовые пояса. IST не является одним из них. Следовательно, ваша строка даты недействительна.

Ответ №3:

использовать GMT 0530 вместо IST как IST не идентифицируется как часовой пояс в JS (не распознается RFC-2822)

 let dateSample = new Date("26-Jan-2021 06:02 PM GMT 0530").toISOString()
console.log(dateSample)
 

отпечатки: 2021-01-26T12:32:00.000Z