繁体   English   中英

给定单位(小时,天,月,年)和数量的JavaScript日期如何增加?

[英]How to increment a JavaScript date given a unit (hours, days, months, years), and an amount?

给定日期,单位(天,月,年-十六进制-甚至秒)和数量,以最干净/最简单的方式增加JavaScript日期的最佳方法是什么? (最好不使用库)

var dateIncrementUnit = "d";
var dateIncrementAmount = 1;
var myDate = new Date();

var newDate = ? // myDate + 1d

此功能将日期单位设置为其自身+增量。

 function iD(date, increment, unit) { var units = { s: [date.getSeconds(), "setSeconds"], m: [date.getMinutes(), "setMinutes"], h: [date.getHours(), "setHours"], d: [date.getDate(), "setDate"], M: [date.getMonth(), "setMonth"], y: [date.getFullYear(), "setFullYear"] } date[units[unit][1]](units[unit][0] + increment); return date; } console.log(iD(new Date(), 2, "M") + ""); console.log(iD(new Date(), 3, "y") + ""); console.log(iD(new Date(), 30, "m") + "") 

您可以使用以下功能:

 function addToDate(dt, unit, num) { const p = { s: dt.getSeconds(), m: dt.getMinutes(), h: dt.getHours(), d: dt.getDate(), M: dt.getMonth(), y: dt.getFullYear() }; p[unit] += num; dt = new Date(py, pM, pd, ph, pm, ps); // Overshooting the end of the month? Return last day of that month if ("My".includes(unit) && dt.getMonth() !== pM % 12) dt.setDate(0); return dt; } // Example call: add 1 month to today console.log(addToDate(new Date(), "M", 1).toString()); 

if存在if条件,则要在1月31日前增加1个月(例如2月31日),但是将其默默转换为3月3日,这是一个奇怪的结果。 if块可确保返回目标月份的最后一天。 因此,在此示例情况下,2月28日(或29日)。

同样,如果在2月29日(a年)加上1年,则将给出3月1日,而2月28日可能是预期的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM