在 RSS 提要中将 IST 日期转换为 UTC

Convert IST date to UTC in RSS feed

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

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

我得到的日期无效

这个字符串来自Times Of India RSS feeds, such as this one。如何处理 RSS 提要中的时区缩写?

试试这个:

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

你会收到错误,因为 IST 只是删除它,它不会给你一个错误

如果你只想要日期,那么使用这个:

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

如果要解析或显示 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>

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

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

另一个常见的例子是CST,可以是“Central Standard Time”、“Cuba Standard Time”或“China Standard Time”。

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

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

您应该知道印度时报的 RSS 提要格式没有正确使用时间戳。 RSS 2.0 specification requires timestamps to be in RFC 822 format. In that format, IST is not a valid time zone. Indeed, if you put it into a site like Feed Validator, it will give you the error "element must be an RFC-822 date-time".

请注意 RFC 822 is old and outdated. It's been superseded with RFC 2822, and then again by RFC 5322. Time zone abbreviations have all been obsoleted and moved to the 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 提要,您将需要手动确定如何解释它们。没有确定的列表。

补充阅读: