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');
希望这可以帮助!!