如何将 1 天添加到当前日期?

IT技术 javascript
2021-01-25 09:38:44

我有一个当前的 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,这是我期望发生的。

6个回答

将一天添加到日期对象:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);
啊哈。我没有意识到getDate正在从 UTC 转换为本地时间。 a.setUTCDate(a.getUTCDate() + 1);<-- 适用于祖鲁日期。
2021-03-17 09:38:44
当然不是!您从 UTC 时间开始,然后基本上将其转换为本地时间,添加一天,然后将其转换回 UTC。所以一天被添加到本地日期,但只有 23 小时 UTC 时间。如果将 UTC 日期加 1,您将返回当地时间 01:00:00。这种行为并不是夏令时独有的,它是使用三个不同时区的结果。
2021-03-19 09:38:44
看到重复的问题:stackoverflow.com/questions/3674539/...这个答案很好,但没有考虑夏令时。一年中有 2 天没有 24 小时。
2021-03-20 09:38:44
@Jess——这取决于您希望如何对 DST 进行更改。该问题询问如何在日期中添加一个,这正是上述答案的作用。添加 24 小时不一定会增加该日期,使用setDate将 1 添加到本地日期总是如此。
2021-03-27 09:38:44
@Jess 我知道我迟到了,但是你对使用get/的评论setUTCDate()本身就应该是一个答案(如果是的话,我会高度赞成)。
2021-03-31 09:38:44

以我的拙见,最好的方法是以毫秒为单位添加一整天,这取决于您如何考虑您的代码,如果您在本月的最后一天,它可能会搞砸。

例如 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();

恕我直言,这可确保准确性

这是另一个例子。我不喜欢那个。它可以为你工作,但不像上面的例子那么干净。

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

恕我直言 this === 'POOP'

由于夏令时,你们中的一些人对我的毫秒方法感到不满。所以我要抨击这个。首先,一些国家和州没有夏令时。第二 正好加上 24 小时就是一整天。如果日期编号每年不更改一次,但在 6 个月后得到修复,我认为那里没有问题。但是为了确定并必须处理分配的邪恶,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.
@Matt H 你从哪里得到这个想法的。从 1970/01/01 开始以毫秒为单位以 UTC 时间设置
2021-03-17 09:38:44
这将是 UTC 时间的第二天,是的,但不一定是当地时间。在美国的 Spring Forward 日,一天有 25 个小时。因此,如果您在 00:00 时有例如 3/31/15,并添加 86400000 毫秒,则在 Sprint Forward 日,本地时间将是 3/31/15 在 23:00 时,因为当天有 25 小时。
2021-03-18 09:38:44
添加秒/毫秒不适用于夏令时。
2021-04-01 09:38:44
这是过度设计的。如果您遇到这样的问题,请使用诸如 moment 之类的库来帮助使事情变得更容易。
2021-04-03 09:38:44
你可以看到这样的效果: var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
2021-04-08 09:38:44

如果您想在当前日期时间中添加一天(24 小时),您可以像这样添加毫秒:

new Date(Date.now() + ( 3600 * 1000 * 24))
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,并且日期不会改变(有些浏览器会在午夜时分执行,其他浏览器会在一毫秒后执行) . :-(
2021-03-30 09:38:44

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

希望这可以帮助