moment.js把2位年份转换成错误的4位年份问题

9

有人遇到过Moment.js的这个问题吗:在Firefox中使用moment("6/12/15").format("M/D/YYYY h:mm:ss A"),我得到的是6/12/1915而不是6/12/2015?



如果我进入momentjs.com网站并将其粘贴到控制台中,我会得到2015年(以及一个弃用通知)。 - T.J. Crowder
1
@T.J.Crowder 我在 Firefox 中得到了 1915。简单的解决方法是不要使用两位数的年份。 - Jack
你可以覆盖 moment.parseTwoDigitYear 方法来设置自己的窗口,例如在这里查看:https://github.com/moment/moment/issues/2219 - Donal
@Jack:果然,在Firefox中发生了,而在Chrome中没有。这就是为什么有一个弃用通知的原因。 :-) - T.J. Crowder
1个回答

12
当你在moment中抛入一个随机字符串,却没有告诉它字符串的格式时,它将使用JavaScript Date对象进行解析,并且您传递的格式未定义于标准中。这会让您容易受到特定于实现的行为影响。在这种情况下,您所描述的在Firefox上发生但在Chrome上不发生。
这已经成为一个足够严重的问题,以至于Moment正在完全废弃此功能
要获得可靠的结果,请告诉Moment字符串的格式:
moment("6/12/15", "M/D/YY").format("M/D/YYYY h:mm:ss A")

2
好的。我感谢您的解释,因为所有的覆盖都对我无效。所以我会确保用户不能传入两位数的年份,因为我需要一个四位数的年份来存入数据库。谢谢! - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接