Конвертировать дату IST в UT C в ленте RSS - PullRequest
1 голос
/ 08 апреля 2020

У меня есть Дата в строковом формате 'Ср, 08 апреля 2020 15:24:06 IST' Я хочу преобразовать ее в javascript Дата, чтобы я мог выполнять операции. Я хочу получить UT C дату из IST или что-либо, переданное API, и мне нужно конвертировать его в соответствии с часовым поясом пользователя, чтобы я не мог удалить IST из него. IST (индийское стандартное время) является лишь примером, который может быть AET (австралийское восточное время), EET (восточноевропейское время) и т. Д. c ...

new Date('Wed, 08 Apr 2020 15:24:06 IST')

Я получаю недопустимую дату

Эта строка взята из RSS-каналов Times Of India , таких как this один . Как обрабатывать сокращения часовых поясов в RSS-каналах?

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Без дополнительного контекста это невозможно. Сокращения часовых поясов не стандартизированы и не являются уникальными.

В вашем примере вы сказали, что IST означает для вас «Стандартное индийское время», однако IST означает также , используемый для » Стандартное время Израиля "и" Iri sh Стандартное время ". Все они имеют очень разные смещения часового пояса.

Другим распространенным примером является CST, которым могут быть «Центральное стандартное время», «Стандартное время Кубы» или «Стандартное время Китая».

Вместо этого - вы должны go вернуться к исходному источнику и получить смещение часового пояса (например, +05:30) или идентификатор часового пояса (например, Asia/Kolkata), или получить этот контекст другим способом.

Вы сказали, что извлекаете эту временную метку из RSS-канала от Times of India . Это тип дополнительного контекста, о котором я говорю. Поскольку вы знаете, что это и индийский источник новостей, вы можете смело предположить, что IST означает стандартное время Индии.

Вы должны знать, что формат RSS-канала в Times of India неправильно использует временные метки. Спецификация RSS 2.0 требует, чтобы временные метки были в формате RF C 822 . В этом формате IST не является допустимым часовым поясом. Действительно, если вы поместите его на сайт, такой как Feed Validator , он выдаст вам ошибку "элемент должен быть RF C -822 дата-время" .

Обратите внимание, что RF C 822 является старым и устаревшим. Он был заменен на RF C 2822 , а затем снова на RF C 5322 . Аббревиатуры часовых поясов все устарели и перемещены в раздел obs-zone. Таким образом, они действительно не должны использоваться вообще. Должны отображаться только цифры c. Тем не менее, многие реализации RSS следуют старому стандарту, и поэтому разумно принять некоторые сокращения, указанные в obs-zone. В частности, все реализации должны принимать следующее:

"Z"    == "+0000"
"UT"   == "+0000"
"GMT"  == "+0000"
"EST"  == "-0500"
"EDT"  == "-0400"
"CST"  == "-0600"
"CDT"  == "-0500"
"MST"  == "-0700"
"MDT"  == "-0600"
"PST"  == "-0800"
"PDT"  == "-0700"

(Другие военные зоны «A» - «Y» никогда не должны использоваться.)

Обратите внимание, что IST не входит в число их. Таким образом, чтобы ответить на ваш вопрос напрямую, при синтаксическом анализе временной метки RF C 822, содержащей нестандартное сокращение часового пояса, вам потребуется заменить сокращение на смещение самостоятельно перед анализом. В этом случае:

var s = 'Wed, 08 Apr 2020 15:24:06 IST';
var d = new Date(s.replace('IST', '+0530'));

Вы также можете заменить другие obs-zone аббревиатуры, которые я перечислил, но, как правило, в этом нет необходимости. Большинство реализаций ECMAScript будут анализировать их (даже если они не требуются по spe c).

Если вы столкнетесь с другими RSS-лентами с другими сокращениями часовых поясов, вам нужно будет вручную определить, что как их интерпретировать. Нет окончательного списка.

Некоторые дополнительные чтения:

0 голосов
/ 08 апреля 2020

Если вы хотите проанализировать или отобразить момент в UT C, вы можете использовать moment.ut c ()

var res = moment.utc("Wed, 08 Apr 2020 15:24:06",'DD-MMM-YYYY').format("YYYY-MM-DD");
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
0 голосов
/ 08 апреля 2020

Попробуйте:

moment('Wed, 08 Apr 2020 15:24:06').utc();

И вы получаете ошибку из-за IST, просто удалите ее, и она не выдаст ошибку

Если вы хотите только дату, используйте это:

moment('Wed, 08 Apr 2020 15:24:06').utc().format('YYYY-MM-DD');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...