Nodejs中moment.js的一个小问题
Nodejs中moment.js的一个小问题
var day = new Date(2011, 9, 16);
var dayWrapper = moment(day);
console.log( ‘day:’ + dayWrapper.format(‘YYYY-MM-DD’));
结果:day:2011-10-16 这样的创建,为什么会变成10月?
当然可以。让我们来详细分析一下这个问题,并提供一个解决方案。
问题描述
在您的代码中,您使用 new Date(2011, 9, 16)
创建了一个日期对象,然后使用 moment
将其转换为一个 Moment.js 对象,并尝试以特定格式输出。但是,输出的月份显示为 10 月,而不是预期的 9 月。
问题原因
问题的关键在于 JavaScript 的 Date
对象中的月份是从 0 开始计数的。这意味着:
- 0 表示 1 月
- 1 表示 2 月
- …
- 9 表示 10 月
- …
因此,当您传递 9
给 Date
构造函数时,它实际上表示的是 10 月。
解决方案
为了确保正确地设置月份,您可以将月份值从 9
更改为 8
。以下是修改后的代码:
const moment = require('moment');
// 注意月份是从 0 开始的
var day = new Date(2011, 8, 16); // 月份从 0 开始,8 表示 9 月
var dayWrapper = moment(day);
console.log('day: ' + dayWrapper.format('YYYY-MM-DD')); // 输出: day: 2011-09-16
示例代码
这里是一个完整的示例代码,展示如何正确设置月份并输出日期:
const moment = require('moment');
// 使用正确的月份值
var day = new Date(2011, 8, 16); // 月份从 0 开始,8 表示 9 月
var dayWrapper = moment(day);
console.log('day: ' + dayWrapper.format('YYYY-MM-DD')); // 输出: day: 2011-09-16
通过以上修改,您可以确保输出的日期是正确的。希望这能解决您的问题!
var day = new Date(‘2011-9-16’); 就是对的。
month从0开始
在Node.js中使用moment.js
时,需要注意月份是从0开始计数的。也就是说,0代表1月,1代表2月,以此类推。因此,在你的例子中,new Date(2011, 9, 16)
中的9
实际上表示的是10月,而不是9月。
示例代码
var moment = require('moment');
// 创建一个新的Date对象,注意月份从0开始计数
var day = new Date(2011, 8, 16); // 9月16日
// 使用moment.js包裹Date对象
var dayWrapper = moment(day);
// 输出格式化的日期
console.log('day:', dayWrapper.format('YYYY-MM-DD')); // 输出:day: 2011-09-16
解释
new Date(2011, 9, 16)
中的9
表示10月,因为月份是从0开始计数的。- 修改为
new Date(2011, 8, 16)
后,9月16日被正确地解析,并且使用moment.js
格式化输出为2011-09-16
。
如果你希望更直观地理解月份,可以直接使用字符串形式来创建日期:
var day = moment("2011-09-16").toDate();
var dayWrapper = moment(day);
console.log('day:', dayWrapper.format('YYYY-MM-DD')); // 输出:day: 2011-09-16
这样可以避免因月份计数导致的混淆。