在moment.js环境中,我偶然发现了一个有趣的问题。基本上,我试图从时代中获取日期格式“星期五8月24日”的时间,但结果是我收到了NaN。以下是我的node.js代码:
const moment = require("moment");
console.log(moment("Friday 24th Aug", "dddd Do MMM").valueOf());moment.js version: 2.23.0
nodejs version: v8.11.3
OS: Linux 16.04.1-Ubuntu如果我在浏览器上尝试相同的控制台行,则工作正常。有人偶然发现过这样的东西吗?
编辑:为链接道歉,我使用了一个已经创建的moment.js版本: 2.2.1的jsfiddle。它似乎在那个版本中“起了作用”,但现在它已经改变了:http://jsfiddle.net/fy8w62on/ (moment.js版本2.2.1)
发布于 2019-01-09 23:55:20
valueOf()给出了NaN,因为您的矩对象(moment("Friday 24th Aug", "dddd Do MMM")是无效。
请注意,正如文档的默认设置部分所述:
您可以创建仅指定部分单元的矩对象,其余的将默认为当前日、月或年,或0为小时、分钟、秒和毫秒。
因此,矩试图创建一个表示2019-08-24的实例(使用当前年份),但它创建了一个Invalid Date,因为2019-08-24是星期六(使用默认设置英语、美国语言环境),而不是星期五(正如其他人在评论中已经指出的那样)。
使用parsingFlags,您将看到weekdayMismatch设置为true
var m = moment("Friday 24th Aug", "dddd Do MMM");
console.log(m.valueOf()); // NaN
console.log(m.format()); // Invalid date
console.log(m.parsingFlags()); // Object with "weekdayMismatch": true<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.23.0/moment.min.js"></script>
发布于 2019-01-09 21:59:15
Friday 24th Aug不包含一年,所以现在必须猜测它是哪一年,并使用当前年份进行猜测。
如果在运行代码时是2018年,那么valueOf将不返回NaN。
但是它是2019年,所以2019年的Friday 24th Aug是无效的。
https://stackoverflow.com/questions/54118896
复制相似问题