在Angular JS中将月的第一天转换为月的最后一天

时间:2017-02-14 05:34:06

标签: angularjs momentjs

我对角度JS很新,但从早上起就一直在努力。

我有一个“MM / yyyy”格式的日期选择器,这里返回的日期值是一个月的第一天。 即2017年2月1日,但我希望日期为2017年2月28日,即月的最后一天。

只是为了更新我正在使用时刻功能。

请建议一些解决方法!

3 个答案:

答案 0 :(得分:2)

如果您拥有JavaScript Date实例d,则只需使用

即可

const d = new Date(2017, 1) // 1st Feb
d.setMonth(d.getMonth() + 1)
d.setDate(d.getDate() - 1)

console.info(d.toLocaleString())

现在d将是该月的最后一天。

注意:这可以轻松处理年份边界而无需任何额外代码。例如

const d = new Date(2017, 11) // 1st Dec
console.info('Before', d.toLocaleString())

d.setMonth(d.getMonth() + 1)
d.setDate(d.getDate() - 1)

console.info('After', d.toLocaleString())

答案 1 :(得分:2)

我从您的问题中推断出您使用的是momentjs

此lib为您提供内置函数endof

const date = new Date(2017, 1) // 1st Feb    
moment(date).endOf('month');

这应该直接处理大多数情况,包括leap years

答案 2 :(得分:0)

您只需要在该日期添加1个月,然后减去1天。这是一个例子:

// Let's suppose the date selected from the picker was February 1st, 2017
// Remember months in JS are zero-index based, so 0=Jan, 1=Feb, etc.
var selectedDate = new Date(2017, 1, 1);

var month = selectedDate.getMonth();
var year = selectedDate.getFullYear();

month ++;

if(month > 11){ // Last month number is 11 (December)
  month = 0; // January
  year ++;
}

var oneMonthAheadDate = new Date(year, month, 1);
var lastDayOfSelectedMonthDate = new Date(oneMonthAheadDate.getTime() - (1000 * 3600 * 24)); // We substract 1 day (1000 ms x 3600 secs in an hour x 24 hours in a day)

您所需的日期将在lastDayOfSelectedMonthDate