我对角度JS很新,但从早上起就一直在努力。
我有一个“MM / yyyy”格式的日期选择器,这里返回的日期值是一个月的第一天。 即2017年2月1日,但我希望日期为2017年2月28日,即月的最后一天。
只是为了更新我正在使用时刻功能。
请建议一些解决方法!
答案 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