2012-11-05 65 views
1

可能重复:
How to add number of days to today’s date?X天添加到指定的日期

我想补充X天,其中X是我先前所指定的数量,到特定的日期。

例如,日期是29/11/2012(格式:DD/MM/YYYY),并且我想在该日期添加5天,因此输出应为03/12/2012

有什么我想:

var days_to_add = 5; 
$myyear = 2012; 
$mymonth = 11; 
$myday = 29; 
date = new Date(); 
date.setFullYear($myyear,$mymonth,$myday); 
date.setDate(date.getDate()+(days_to_add-1)); 
alert(date.getDate()+'/'+date.getMonth()+'/'+date.getFullYear()); 

这是工作,但只有当日期犯规传递给定日期的下月,否则,输出还是不错的。

你们有任何解决方案吗?

+0

该月应该自动更新。 –

+0

@Diodeus不是真的 - 我想给指定的日期添加一定的天数,而那个人会到当前的日期。 – Scott

+0

@dystroy是的,这是主要问题;它没有。在这种情况下,我看到了'0'。 – Scott

回答

1

你的问题不是在一天此外,需要时自动年或月的setDate功能增量:

如果指定的参数是在预期范围之外,的setDate 试图相应地更新Date对象中的日期信息

但是,您没有正确创建日期。更改

$myyear = 2012; 
$mymonth = 11; 
$myday = 29; 
date = new Date(); 
date.setFullYear($myyear,$mymonth,$myday); 

$myyear = 2012; 
$mymonth = 11; 
$myday = 29; 
date = new Date($myyear,$mymonth,$myday); 

Date构造函数需要一个月在[0,11]。如果你想11将于11月而不是十二月,使用

date = new Date($myyear,$mymonth-1,$myday); 

而且getMonth返回[0,11的整数,这可能也让你吃惊。如果你想有通常的日期格式化你需要输出date.getMonth()+1

alert(date.getDate()+'/'+(date.getMonth()+1)+'/'+date.getFullYear()); 

如果要添加前导零,你可以这样做:

alert(
    (date.getDate()<10 ? "0" : "") + date.getDate() 
    +'/'+ 
    (date.getMonth()<9 ? "0" : "") + (date.getMonth()+1) 
    +'/'+ 
    date.getFullYear() 
); 

Demonstration

注意,如果你有许多日期操作要做,你应该考虑使用像date.js这样的库。

+0

不工作,请参阅现场演示:http://jsfiddle.net/x36gc/ – Scott

+0

它的工作原理。阅读更新的答案。 –

+0

是的,但为什么在指定的月份是11月时显示“2013”​​?它应该输出'03/12/2012'吗? – Scott

2

这样更简单吗?

var fiveDaysLater = new Date(existingDate.getTime()); 
fiveDaysLater.setDate(fiveDaysLater.getDate() + 5); 
+0

什么是'existingDate'? – Scott

+0

从@Diodeus的链接可以帮助这个var dd = someDate.getDate(); var mm = someDate.getMonth()+ 1; var y = someDate.getFullYear(); var someFormattedDate = dd +'/'+ mm +'/'+ y; – topcat3

+0

只需更改existingDate而不是someDate :) – topcat3