具有特定语言环境的 Javascript 日期解析

标签 javascript datetime locale

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

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

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

也许我忽略了文档中的某些内容。但是有人有其他解决方案吗?将不胜感激。

附言我很难想象这个问题还没有被问到,但我的搜索也没有出现太多。

最佳答案

来自 MDN 的 Date() documentation:

Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies. Support for RFC 2822 format strings is by convention only. Support for ISO 8601 formats differs in that date-only strings (e.g. "1970-01-01") are treated as UTC, not local.

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

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'));

或者,字符串拆分也非常简单(即用空格拆分,然后用 / 拆分第一个结果,用 : 拆分第二个结果)。

关于具有特定语言环境的 Javascript 日期解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50781887/

相关文章:

c# - 如何将字符串列排序为 GridView 中的日期时间列

php - 在php中根据时区计算时间

Grails 设置语言环境不会改变语言

c++ - 针对特定后端的 Boost.Locale 测试

java - 如何在Java中的所有类中共享使用哪个Locale?

javascript - 在 Angular 7 中实现 redux 会出现错误 TS2307 : Cannot find module 'redux' . 错误

javascript - Chrome 不显示在 HTML 页面中动态加载的外部 JS 文件的更新内容

c# - 强制浏览器使用新的 JavaScript 文件而不是缓存的

javascript - 无法将js加载到MongoDB中

c - 在 C 中的 system() 上执行命令 - linux