JS的开始和结束

我需要计算给定年份= 2014和月份= 9(2014年9月)的JSdate。

我试过这个:

var moment = require('moment'); var startDate = moment( year+'-'+month+'-'+01 + ' 00:00:00' ); var endDate = startDate.endOf('month'); console.log(startDate.toDate()); console.log(endDate.toDate()); 

这两个日志显示:

 Tue Sep 30 2014 23:59:59 GMT+0200 (CEST) Tue Sep 30 2014 23:59:59 GMT+0200 (CEST) 

结束date是正确的,但是…为什么开始date不是?

这是因为endOf改变原始值。

相关报价:

通过将其设置为时间单位的末尾来改变原始时间。

以下是一个示例函数,可以为您提供所需的输出:

 function getMonthDateRange(year, month) { var moment = require('moment'); // month in moment is 0 based, so 9 is actually october, subtract 1 to compensate // array is 'year', 'month', 'day', etc var startDate = moment([year, month - 1]); // Clone the value before .endOf() var endDate = moment(startDate).endOf('month'); // just for demonstration: console.log(startDate.toDate()); console.log(endDate.toDate()); // make sure to call toDate() for plain JavaScript date type return { start: startDate, end: endDate }; } 

参考文献:

  • endOf()
  • clone()
  • Date from object

当你使用.endOf()你正在改变它被调用的对象,所以startDate变成了9月30日

您应该使用.clone()来创build它的副本,而不是更改它

 var startDate = moment(year + '-' + month + '-' + 01 + ' 00:00:00'); var endDate = startDate.clone().endOf('month'); console.log(startDate.toDate()); console.log(endDate.toDate()); Mon Sep 01 2014 00:00:00 GMT+0700 (ICT) Tue Sep 30 2014 23:59:59 GMT+0700 (ICT) 

不要认为有一些直接的方法来获得最后一天,但你可以做这样的事情:

 var dateInst = new moment(); /** * adding 1 month from the present month and then subtracting 1 day, * So you would get the last day of this month */ dateInst.add(1, 'months').date(1).subtract(1, 'days'); /* printing the last day of this month's date */ console.log(dateInst.format('YYYY MM DD')); 

您可以直接使用这个月份的结束date或开始date

 moment().startOf('month').format("YYYY-DD-MM"); moment().endof("month").format("YYYY-DD-MM"); 

你可以通过定义一个新的格式来改变格式

你的startDate是第一个月,在这种情况下,我们可以使用

 var endDate = moment(startDate).add(1, 'months').subtract(1, 'days'); 

希望这可以帮助!!