在RSS feed中将IST日期转换为UTC

时间:2020-04-08 10:39:35

标签: javascript date rss

我有一个字符串格式的日期'Wed,08 Apr 2020 15:24:06 IST' 我想将其转换为javascript Date,以便执行操作。 我想从IST或API传递的任何内容中获取UTC日期,并且必须按照用户时区进行转换,因此无法从中删除IST。 IST(印度标准时间)只是一个例子,它可以是AET(澳大利亚东部时间),EET(东欧时间)等...

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

我的日期无效

此字符串来自Times Of India RSS feeds,例如this one。如何处理RSS feed中的时区缩写?

3 个答案:

答案 0 :(得分:1)

没有其他上下文,这是不可能的。时区缩写不是标准化的,也不是唯一的。

在您的示例中,您说IST的意思是“印度标准时间”,但是IST也是 ,用于“以色列标准时间”和“爱尔兰标准时间” ”。所有这些都有不同的时区偏移。

另一个常见的示例是CST,可以是“中央标准时间”,“古巴标准时间”或“中国标准时间”。

相反-您应该返回原始来源,并获取时区偏移量(例如+05:30)或时区标识符(例如Asia/Kolkata),或者在其他一些情况下派生该上下文方式。

您说您正在从an RSS feed from Times of India检索此时间戳。这就是我所说的其他上下文。由于您知道它是印度新闻来源,因此可以放心假设IST表示印度标准时间。

您应该知道,印度时报的RSS feed格式未正确使用时间戳。 RSS 2.0 specification要求时间戳记在RFC 822 format中。按照这种格式,IST不是有效的时区。实际上,如果将其放到Feed Validator之类的网站中,则会出现错误"element must be an RFC-822 date-time"

请注意,RFC 822已过时且过时。它已被RFC 2822取代,然后又被RFC 5322取代。时区缩写都已过时,并移至obs-zone部分。因此,根本不应该使用它们。仅数字偏移应出现。也就是说,许多 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不在其中。因此,要直接回答您的问题,当解析包含非标准时区缩写的RFC 822时间戳时,您需要在解析之前自己用偏移量替换缩写。在这种情况下:

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

您也可以替换我列出的其他obs-zone缩写,但是通常没有必要。大多数ECMAScript实现都会解析这些内容(即使规范没有要求也是如此)。

如果遇到带有其他时区缩写的其他RSS feed,则需要手动确定如何解释它们。没有确定的列表。

一些其他读物:

答案 1 :(得分:0)

尝试一下:

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

由于IST,您会收到错误消息,只需删除它,它就不会给您带来错误

如果只想约会,请使用以下命令:

moment('Wed, 08 Apr 2020 15:24:06').utc().format('YYYY-MM-DD');

答案 2 :(得分:0)

如果要解析或以UTC显示时刻,则可以使用moment.utc()

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>