Javascript区域设置日期转换

时间:2016-05-31 15:13:31

标签: javascript date locale

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

这适用于全球日期验证。

我到目前为止

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

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

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

2 个答案:

答案 0 :(得分: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/>");

答案 1 :(得分:0)

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

现在,在这里你要做的是与 toLocaleDateString 方法相反的做法,你想给一个带有Locale的格式化日期字符串,你希望它返回日期对象。为此,您可以查看this post,我希望它可以帮助您抢先一步。

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