Javascript语言环境日期转换

问题描述:

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

这是用于全局日期验证。

到目前为止,我已经

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

我希望能够有new Date("2016 maj 01")然而,因为这不是英语,这是一个无效的日期。我可以使用区域设置将其转换为有效的日期对象吗?

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

+0

[JS的可能重复:新的Date()不接受日期字符串在我自己的语言环境(d/M/y)](http://stackoverflow.com/questions/7165483/js-new-date-is-not-accepting-date-string-in-my-own-locale-dmy) –

+0

不幸的是,我的月进来作为一个缩写字符串不是数值(maj不是5) –

正如我所评论的,这可能是一个现有问题的重复。 JavaScript日期对象不能从本地化字符串构建。

但是,你婉从瑞典使自己的日期建设者:

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/>");

+0

这看起来不错,问题是我需要丹麦,芬兰和挪威以及它。我希望有一个全球性的解决方案。 –

+0

恐怕你将不得不为其他语言实现自己的版本,或者找到一个有用的全球化图书馆 –

我认为你正在试图做的方法Date.prototype.toLocaleDateString相反(),它根据传入的Locale和options参数返回格式化的字符串。你可以阅读更多关于它here

现在,在这里,你想要做的toLocaleDateString方法做什么,你想给一个格式化的日期字符串用语言环境的对面,你希望它返回一个日期对象。为此,您可以查询this post,我希望它能帮助您取得领先。

另外,如果你是舒适的使用外部库,那么你可以探索本地化库,例如moment.js

+0

,但我仍然有我的日期有一个名称的问题。我的日期不纯粹是数字。 –