toLocaleDateString的相反方法

时间:2015-06-19 11:00:08

标签: javascript jquery globalization culture

为了创建一个尊重浏览器文化的字符串,我们可以这样做:

var myDate = new Date();
var myDateString = myDate.toLocaleDateString(myDate); //returns a string

这很好,因为如果我在葡萄牙,6月1日,这将输出“01/06/2015”,而如果我在州,它将输出“06/01/2015 ”

现在我想要完全相反。我想要:

var myDateString = "01/06/2015"
var myDate = myDateString.toLocaleDate(); //it should return a Date

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

浏览器不知道用户识别的“文化”,它只能访问各种格式化字符串(日期,数字,货币,语言等)的区域设置。没有标准的JavaScript API来访问这些设置。

浏览器确实可以访问区域设置,但是它们无法可靠地实现 Date.prototype.toLocaleString 的任何特定格式,因此无法将Date字符串可靠地转换为基于的Date对象浏览器对系统设置的解释。最后,无论如何,无法保证任何日期字符串都符合区域设置。

解析字符串的唯一可靠方法是指定特定格式。如果您已指定d / m / y并且用户输入2015年6月6日,则您没有选择,只能相信他们已阅读并理解所需格式并打算将其解释为2015年6月1日。确实存在别无选择。

解析特定格式的日期并不困难,例如以d / m / y格式解析字符串:

function parseDMY(s) {
  var b = s.split(/\D+/);
  return new Date(b[2], b[1]-1, b[0]);
}

如果要验证日期,则需要额外的行:

function parseDMY(s) {
  var b = s.split(/\D+/);
  var d = new Date(b[2], b[1]-1, b[0]);
  return d && d.getMonth() == b[1]-1? d : new Date(NaN);
}

如果您想确保将2位数年份视为完整年份(大多数浏览器将转换为1/1/03至1/1/1903),则需要再增加一行:

function parseDMY(s) {
  var b = s.split(/\D+/);
  var d = new Date(b[2], b[1]-1, b[0]);
  d.setFullYear(b[2]);
  return d && d.getMonth() == b[1]-1? d : new Date(NaN);
}