我从用户输入接收日期/时间对象,并希望将它们解析为javascript Date对象。日期格式为:02/06/2018 00:59:03
,表示2018年6月的第二天;英国的地方。
虽然这看起来非常简单,并且是一个超级广泛的用例场景,但我似乎无法在documentation中找到如何指定我希望用于解析的语言环境。
解析器所做的只是假设我使用的是美国语言环境格式,默认情况下首先是月份,然后是日期,然后是年份,因此它会逐月混合。
目前我看到的唯一可用选项是编写我自己的解析器,这很好ish(当然不是,因为我可能明天需要另一个语言环境),但对我来说似乎有点80年代。
也许我忽略了文档中的某些内容。但有没有人有任何其他解决方案?非常感谢。
P.S。我很难想象还没有被问过,但我的搜索也没有发现太多。
答案 0 :(得分:3)
注意:使用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'));
或者,字符串拆分也很容易(即按空格分割,然后将第一个结果拆分为/
,将第二个结果拆分为:
)。