【问题标题】:Javascript Locale Date ConversionsJavascript 语言环境日期转换
【发布时间】:2016-05-31 15:13:30
【问题描述】:

我有一个字符串进入一个函数,这个字符串是来自瑞典的日期,格式为2016 maj 01。传递给这个函数的是语言环境sv-se 的国家代码。我需要将日期字符串转换为有效的日期对象,然后我可以应用语言环境。

这是用于全球日期验证。

到目前为止我有

var date = new Date();
Intl.dateTimeFormat(locale, options).format(date);

我希望能够拥有new Date("2016 maj 01"),但是由于这不是英语,这是一个无效的日期。我可以使用语言环境将其转换为有效的日期对象吗?

有人建议我的问题与另一个类似。我的问题不同的方式是,我将月份作为月份的缩写名称输入。如果月份以数字形式显示,这将不是问题

【问题讨论】:

标签: javascript date locale


【解决方案1】:

正如我评论的那样,它可能与现有问题重复。 JavaScript Date 对象不能从本地化字符串构建。

但是,您可以使用瑞典语制作自己的日期生成器:

Date.fromSwedish = (function() {
  var months = {
    'jan': 0,
    'feb': 1,
    'mar': 2,
    'apr': 3,
    'maj': 4 /*...*/
  };

  return function(s) {
    var splitted = s.split(' ');
    var year = splitted.length > 0 ? splitted[0] : 1970;
    var month = splitted.length > 1 ? months[splitted[1].toLowerCase()] : 0 ;
    var day = splitted.length > 2 ? splitted[2] : 1;
    return new Date(year, month, day);
  };
}());

document.write(Date.fromSwedish("2016") + "<br/>");
document.write(Date.fromSwedish("2016 feb") + "<br/>");
document.write(Date.fromSwedish("2016 maj 01") + "<br/>");

【讨论】:

  • 这看起来不错,问题是丹麦语、芬兰语和挪威语也需要它。我希望有一个全球性的解决方案。
  • 恐怕你得自己实现其他语言的版本,或者找一个全球化库
【解决方案2】:

我认为您正在尝试与 Date.prototype.toLocaleDateString() 方法相反,该方法根据传递的 Locale 和选项参数返回格式化字符串。你可以阅读更多关于它的信息here

现在,您想要与 toLocaleDateString 方法做相反的事情,您想要提供一个带有 Locale 的格式化日期字符串,并且您希望它返回一个日期对象。为此,您可以查看this post,希望它可以帮助您抢占先机。

此外,如果您习惯使用外部库,那么您可以探索本地化库,例如 moment.js

【讨论】:

  • 这很有帮助,但我仍然有我的日期中有名字的问题。我的日期不是纯粹的数字。
猜你喜欢
  • 2014-03-09
  • 2021-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多