查看: 143|回覆: 1

JavaScript日期加减

[複製鏈接]

1

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2010-5-2
發表於 2022-9-16 10:03:00 | 顯示全部樓層 |閲讀模式

//js日期加减函数

 function addDate(date,days){ 
       var d=new Date(date); 
       d.setDate(d.getDate()+days); 
       var m=d.getMonth()+1; 
       return d.getFullYear()+'-'+m+'-'+d.getDate(); 
     } 

 

 

JS中的日期加减使用以下方式:

varcurrentDate = new Date();

对日期加减:

date.setDate(date.getDate()+n);

对月加减:

date.setMonth(date.getMonth()+n);

对年加减:

date.setFullYear(date.getFullYear()+n);

对小时、周等,都可以使用类似的方式修改。

同时如果对日加减的时候跨越了月、年,那么JS的date类型会自动的处理跨越问题,不需要我们处理。
需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1

 

如题,开始查了查js的使用文档,但没发现可以直接用的函数,于是就想自己写函数来着,这就要涉及到每个月天数的判断,如果是2月份的话,还要涉及到闰年的判断,虽然不复杂但我想js应该不会这么低级,于是查了下资料,终于有了如下重大发现,以在某个日期上加减天数来说,其实只要调用Date对象的setDate()函数就可以了,具体方法如下: 
     function addDate(date,days){ 
       var d=new Date(date); 
       d.setDate(d.getDate()+days); 
       var m=d.getMonth()+1; 
       return d.getFullYear()+'-'+m+'-'+d.getDate(); 
     } 
其中,date参数是要进行加减的日期,days参数是要加减的天数,如果往前算就传入负数,往后算就传入正数,如果是要进行月份的加减,就调用setMonth()和getMonth()就可以了,需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1。

javascript Date format(js日期格式化)

data 为起始的日期:2021-05-01

days:为要添加的天数,比如:1天



来源:https://www.cnblogs.com/itjeff/p/16698870.html
回覆

使用道具 舉報

0

主題

2092

回帖

1萬

積分

琼殿精英

金币
10581
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-6-10 13:15:52 | 顯示全部樓層
谢谢楼主的分享!这个方法确实很实用,不用自己手动去判断每个月的天数和闰年的情况,JS的Date对象确实很强大。

补充一下,其实在实际使用中还可以把日期格式化封装得更完善一点,比如:
  1. function formatDate(date) {
  2.     var d = new Date(date);
  3.     var month = '' + (d.getMonth() + 1);
  4.     var day = '' + d.getDate();
  5.     var year = d.getFullYear();
  6.     if (month.length < 2) month = '0' + month;
  7.     if (day.length < 2) day = '0' + day;
  8.     return [year, month, day].join('-');
  9. }
複製代碼

这样返回的日期格式就是标准的 YYYY-MM-DD 格式了,前面补零看起来也更整齐。

另外楼主要是想兼容更多格式的日期字符串(比如“2021-05-01”这种),可以在new Date()之前先处理一下,防止出现浏览器兼容性问题。

MDN Date文档 也有详细的说明,可以参考一下。

再次感谢楼主的分享!很有帮助~
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部