Javascript Moment.js创建的新日期不正确

Javascript Moment.js创建的新日期不正确,javascript,momentjs,Javascript,Momentjs,我有下面一行使用MomentJS的javascript var date = moment('20/04/20000', 'DD/MM/YYYY'); //notice year twenty thousand alert(date.format()); // alerts "2000-04-20T00:00:00+01:00" 如果我将格式更改为DD/MM/YYYYY它将按预期工作,当然,如果我输入6位数的年份,则除外。我知道这是武断的,但这让我很烦恼。如何使用一种格式,使其在一年中可以有任

我有下面一行使用MomentJS的javascript

var date = moment('20/04/20000', 'DD/MM/YYYY'); //notice year twenty thousand
alert(date.format()); // alerts "2000-04-20T00:00:00+01:00"

如果我将格式更改为
DD/MM/YYYYY
它将按预期工作,当然,如果我输入6位数的年份,则除外。我知道这是武断的,但这让我很烦恼。如何使用一种格式,使其在一年中可以有任意数量的数字?

看起来,moment忽略了任何额外的格式规范。因此,您可以使用您预期的最大日期所需的任意数量的Y。例如,该代码告诉moment预期10位数年:

moment('20/04/20000', 'DD/MM/YYYYYYYYYY').format();
但它的返回值看起来和您期望的一样,5位数的年份:

“20000-04-20T00:00:00-04:00”


这不是一个文档化的特性,当您使用将来的更新时,我会非常小心这段代码。请务必使用单元测试来保护此代码。

我认为您不能。除非您修改插件来完成此操作。您试图实现什么?您可能无法。使用此代码测试您的问题
alert(矩(testDate).format('MM/DD/yyyyy')你可以问自己“为什么?”。如果是因为你认为它应该,停止尝试。如果你正在创建一个游戏,其中的时间段是20000年,日期出于某种原因是相关的,只需从2000年开始工作,并将每年的值增加18.000。或者不要用时间,谢谢特拉维斯。这并不理想,因为(正如你所说)它并不完全稳定。而且,从技术上讲,用户仍然可以输入比我预期的多一个数字。“我期望有多少个Y?”=“一根绳子有多长?”你在写什么类型的软件,需要有100亿年的未来日期?你没有抓住要点。我不需要那个。事实上,我特别需要它不允许这样。因此,如果用户输入,它应该说:“这是不允许的”。目前,如果用户键入的数字较大,则假定为较小的数字,因此我的验证假定该数字有效(不是)Ok等等,如果我使用5位格式(DD/MM/YYYYY),则不正确的假定仍然为5位(即使输入了6位或更多),因此验证将满足其目的。谢谢你的帮助。