如何在当前日期加上1天?


93

我有一个当前的Date对象,需要使用JavaScript Date对象将其增加一天。我有以下代码:

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

如何添加一天?

我已将+1加到上getUTCDay()getUTCDate()但不会显示“”的“星期日” day,这是我希望发生的。


1
“加+1”是什么意思?您需要第二天还是其他时间?
Aleks G

不起作用date: (date.getUTCDate()+1)(为我工作)?可能与date(as Date()-ObjectObject-Key命名冲突。您是否尝试过将Date()-Object称为不同吗?
Dominik Schreiber 2012年

当前仅显示为:<option value =“ 2012-04-06”> 2012年4月6日星期六</ option> <option value =“ 2012-04-07”> 2012年4月7日</ option>,不显示“星期日2012
franticfrantic'4

因此,这不是7 Apr您所需要的(对我来说“第二天添加”是什么)Sunday。请记住+1day:和中都添加date:(或,如当前答案所述)。
Dominik Schreiber'4

Answers:


235

要将一天添加到日期对象:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);

请参阅重复的问题:stackoverflow.com/questions/3674539/…。这个答案是好的,但不能解释DST。一年中有2天没有24小时。
2014年

2
@Jess-取决于您要如何更改表示的DST。这个问题问如何在日期上加上一个,这正是上面的答案。添加24小时不一定会增加该日期,使用setDate将一个日期添加到本地日期总是会增加日期。
RobG 2014年

这就是我的意思。递增3月10日: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();"2013-03-10T23:00:00.000Z"。这是一个微妙的情况,上面的功能对我不起作用。
Jess 2014年

1
当然不是!您从UTC时间开始,然后将其基本上转换为本地时间,添加一天,然后将其转换回UTC。因此,将一天添加到本地日期,但UTC时间只有23小时。如果您将UTC日期加1,您将获得当地时间01:00:00。这种行为并非夏令时独有,这是使用三个不同时区的结果。
RobG 2014年

8
啊哈 我没有意识到getDate是从UTC转换为本地时间。 a.setUTCDate(a.getUTCDate() + 1);<-适用于Zulu日期。
杰西

40

以我的拙见,最好的方法是以毫秒为单位增加一整天的时间,具体取决于您如何考虑代码,如果您将代码放在一个月的最后一天会弄乱。

例如2月28日或3月31日。

这是我将如何做的一个例子:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imo这可以确保准确性

这是另一个例子,我不喜欢它可以为您工作,但不能像上述那样干净

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

恕我直言这==='POOP'

因此,由于日光节约时间的原因,有些人对我的毫秒级方法有所困扰。所以我要扑灭这个。首先,某些国家和地区没有夏令时。第二天加24小时整整一天。如果日期数字每年不更改一次,但在6个月后固定,我在那里看不到问题。但是出于确定性和必须处理邪恶的Date()的目的,我已经想到了这一点,现在完全讨厌Date。这是我的新方法

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

现在是有趣的部分!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

现在我们在祖鲁子午线上清楚地写出了官方有效国际日期对象。现在更改日期

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.

添加秒/毫秒对夏令时无效。
马特H

@Matt H您从哪里得到这个想法的。时间以世界标准时间(UTC)为单位,以毫秒为单位,从1970/01/01开始
彼得•俄罗斯

1
是的,将是UTC时间的第二天,但不一定是当地时间。在美国的春季前进日中,一天有25个小时。因此,如果您在凌晨00:00时有3/31/15,并加上86400000毫秒,则本地时间将在23:00时为3/31/15,因为当天有25个小时。
Matt H

3
您可以看到这样的效果:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H

1
这是过度设计的。如果您遇到这样的问题,请使用诸如moment之类的库或类似的东西来简化事情。
约书亚·迈克尔·瓦格纳


9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

密码笔

var days = 2;
var newDate = new Date(Date.now()+days*24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);


添加一天的毫秒数会失败,因为在遵守夏令时的地方,并非整天都是24小时。例如,智利将于2017年5月14日午夜结束夏令时。时钟将从午夜倒退至23:00。因此,将24小时添加到2017-05-13 00:00:00将产生2017-05-13 23:00:00,并且日期不会更改(某些浏览器会在午夜恰好执行此操作,其他浏览器会在午夜执行此操作) 。:-(
RobG '17年

2

这个问题中受到jpmottin的启发,是一个单行代码:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

希望这可以帮助


-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');

这是什么?您正在使用图书馆吗?
remborg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.