我有一个字符串格式的日期'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中的时区缩写?
答案 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>