Javascript日期解析具有特定区域设置

时间:2018-06-10 08:28:54

标签: javascript datetime locale

我从用户输入接收日期/时间对象,并希望将它们解析为javascript Date对象。日期格式为:02/06/2018 00:59:03,表示2018年6月的第二天;英国的地方。 虽然这看起来非常简单,并且是一个超级广泛的用例场景,但我似乎无法在documentation中找到如何指定我希望用于解析的语言环境。

解析器所做的只是假设我使用的是美国语言环境格式,默认情况下首先是月份,然后是日期,然后是年份,因此它会逐月混合。

目前我看到的唯一可用选项是编写我自己的解析器,这很好ish(当然不是,因为我可能明天需要另一个语言环境),但对我来说似乎有点80年代。

也许我忽略了文档中的某些内容。但有没有人有任何其他解决方案?非常感谢。

P.S。我很难想象还没有被问过,但我的搜索也没有发现太多。

1 个答案:

答案 0 :(得分:3)

来自Date() documentation:

  

注意:使用Date构造函数解析日期字符串(和   Date.parse,它们是等效的)因为强烈气馁   浏览器差异和不一致。支持RFC 2822格式   字符串仅按惯例。对ISO 8601格式的支持不同   仅限日期的字符串(例如“1970-01-01”)被视为UTC,而不是   本地

如果您的输入是结构化的并且格式是常量,那么编写自己的解析器应该很简单。这是一种使用正则表达式的方法。

var dateString = '02/06/2018 00:59:03';

var dateParser = /(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2}):(\d{2})/;
var match = dateString.match(dateParser);
var date = new Date(
    match[3],  // year
    match[2]-1,  // monthIndex
    match[1],  // day
    match[4],  // hours
    match[5],  // minutes
    match[6]  //seconds
);

console.log('Input: ' + dateString);
console.log('Output (en-US): ' + date.toLocaleString('en-US'));
console.log('Output (en-GB): ' + date.toLocaleString('en-GB'));

或者,字符串拆分也很容易(即按空格分割,然后将第一个结果拆分为/,将第二个结果拆分为:)。