一年的时间JS默认为1900而不是2000?

时间:2014-02-25 18:45:15

标签: momentjs

时刻(“05/1/11”)。toString()按预期返回“2011年5月1日星期一”而非2011年。

Moment.js documentation我看到“2位数年份(如果大于68年将返回1900年,否则2000年)”多次(年,周和ISO年)。

我希望在解析没有格式的日期时默认遵循这一点,但事实并非如此。这是一个功能吗?多年来有没有办法迫使它以这种方式行事(2000年,如果低于68)?

我需要解析自由格式的用户输入。它可能是2011年7月5日或2011年7月6日的5/1/11。所以我希望传递到的唯一格式是年度字段,然后只有在找不到四位数的年份时用户输入。

2 个答案:

答案 0 :(得分:5)

如果您没有指定格式字符串,则解析由浏览器处理(即new Date(string)),而不是由Moment处理;请参阅文档中的moment(string)文档。如果您希望Moment进行解析(并应用类似> 68的规则),则需要提供格式字符串。

var test = moment("05/1/11", "MM/D/YY").toString();
$('#date').append(test);

http://jsfiddle.net/WBDDc/

输出:

Sun May 01 2011 00:00:00 GMT-0400

答案 1 :(得分:1)

from Momentjs docs

  

解析两位数年份   默认情况下,假定68之前的两位数字年份是1900年代,而68或以下的年份则假定是2000年代。可以通过替换moment.parseTwoDigitYear方法来更改。此方法的唯一参数是一个字符串,其中包含用户输入的两年,并且应以整数形式返回年份。

您可以使用此代码来配置一下moment如何解析两年字符串

   moment.parseTwoDigitYear = function (yearString) {
        return parseInt(yearString) + (parseInt(yearString) > 19 ? 1900 : 2000);
    }