【问题标题】:Add one day to date in javascript在javascript中添加一天
【发布时间】:2014-06-19 17:00:59
【问题描述】:

我相信很多人都问过这个问题,但是当我检查答案时,我觉得他们的发现是错误的

var startDate = new Date(Date.parse(startdate));
//The start date is right lets say it is 'Mon Jun 30 2014 00:00:00'

var endDate = new Date(startDate.getDate() + 1);
// the enddate in the console will be 'Wed Dec 31 1969 18:00:00' and that's wrong it should be  1 july 

我知道.getDate()从1-31返回,但是浏览器或javascript是否只增加一天而不更新月份和年份?

在这种情况下我应该写一个算法来处理这个吗?还是有别的办法?

【问题讨论】:

  • 你正在有效地做enddate = new Date(30+1) -> new Date(31)。 JS 究竟应该如何知道 31 是什么?
  • getDate() only 返回月份中的哪一天。它没有返回任何关于月/年的信息
  • 请再次阅读问题

标签: javascript date


【解决方案1】:

请注意,Date.getDate 仅返回月份中的某天。您可以通过调用 Date.setDate 并附加 1 来添加一天。

// Create new Date instance
var date = new Date()

// Add a day
date.setDate(date.getDate() + 1)

JavaScript 会自动为您更新月份和年份。

编辑:
这是一个页面链接,您可以在其中找到有关内置 Date 对象的所有很棒的东西,并看看有什么可能:Date

【讨论】:

  • 谢谢...对我帮助很大。
  • 有时这似乎只增加了 23 小时。有什么原因可能会发生吗?
  • 啊哈,从标准时间到夏令时间的变化只增加了 23 小时。太糟糕了,除了几个月和几年之外,它不会更新小时数。我会尝试强制 UTC(它似乎默认为语言环境时区?)。
【解决方案2】:

采用单个数字的 Date 构造函数预期自 1969 年 12 月 31 日以来的毫秒数。

Date.getDate() 返回当前日期对象的日期索引。在您的示例中,这一天是30。最终表达式是 31,因此它在 1969 年 12 月 31 日之后 31 毫秒返回。

使用现有方法的简单解决方案是改用Date.getTime()。然后,添加一天的毫秒数,而不是 1

例如,

var dateString = 'Mon Jun 30 2014 00:00:00';

var startDate = new Date(dateString);

// seconds * minutes * hours * milliseconds = 1 day 
var day = 60 * 60 * 24 * 1000;

var endDate = new Date(startDate.getTime() + day);

JSFiddle

请注意,此解决方案不处理与夏令时、闰年等相关的极端情况。相反,它始终是一种更具成本效益的方法,而是使用像 moment.js 这样的成熟开源库来处理所有事情。

【讨论】:

  • 此解决方案不考虑“节时”更改,因为一天可能恰好比一个小时更长或更短。
  • 你是对的。我将在我的回答中添加一条说明这一点的注释,但到目前为止,明确的最佳解决方案是在存在诸如 moment.js 之类的轻量级库时不要扮演自己的角色,以避免这些边缘情况而不必大惊小怪。这是在 2 行中处理一般情况的一种方法。
【解决方案3】:

2月31日和28日有getDate()的问题我使用这个功能getTime24*60*60*1000 = 86400000

使用此功能:


    function incrementDate(dateInput,increment) {
        var dateFormatTotime = new Date(dateInput);
        var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
        return increasedDate;
    }

示例如下:

var dateWith31 = new Date("2017-08-31");
var dateWith29 = new Date("2016-02-29");

var amountToIncreaseWith = 1; //Edit this number to required input

console.log(incrementDate(dateWith31,amountToIncreaseWith));
console.log(incrementDate(dateWith29,amountToIncreaseWith));

function incrementDate(dateInput,increment) {
        var dateFormatTotime = new Date(dateInput);
        var increasedDate = new Date(dateFormatTotime.getTime() +(increment *86400000));
        return increasedDate;
    }

【讨论】:

  • 我现在改进了它,只是一个函数调用,每天都有变化。欢迎@G.F.
  • 为我工作。在更改月份(环境:应用程序脚本)的情况下,我遇到了 setDate(date.getDate() + 1) 的问题。这个sn-p解决了这些
【解决方案4】:

我现在已经很久没有发布了,但这里是我的答案

function addDays(date, n)
{
  const oneDayInMs = 86400 * 1000;
  return new Date(Date.parse(date) + (n * oneDayInMs));
}
addDays(new Date(), 1);

【讨论】:

    【解决方案5】:

    使用这个我认为它对你有用

    var endDate=startDate.setDate(startDate.getDate() + 1);
    

    【讨论】:

      【解决方案6】:

      我认为您正在寻找的是:

      startDate.setDate(startDate.getDate() + 1);
      

      另外,你可以看看Moment.js

      一个用于解析、验证、操作和格式化日期的 JavaScript 日期库。

      【讨论】:

        【解决方案7】:
        var datatoday = new Date();
        var datatodays = datatoday.setDate(new Date(datatoday).getDate() + 1);
        todate = new Date(datatodays);
        console.log(todate);
        

        这会帮助你...

        【讨论】:

          【解决方案8】:

          只是为了给Date原型添加功能:

          以可变的方式/风格:

          Date.prototype.addDays = function(n) {
             this.setDate(this.getDate() + n);
          };
          
          // Can call it tomorrow if you want
          Date.prototype.nextDay = function() {
             this.addDays(1);
          };
          
          Date.prototype.addMonths = function(n) {
             this.setMonth(this.getMonth() + n);
          };
          
          Date.prototype.addYears = function(n) {
             this.setFullYear(this.getFullYear() + n);
          }
          
          // etc...
          
          var currentDate = new Date();
          currentDate.nextDay();
          

          【讨论】:

          • 你忘记了回报
          【解决方案9】:

          如果您不介意使用库,DateJS (https://github.com/abritinthebay/datejs/) 会让这变得相当容易。但是,除非您要利用其他一些 DateJS 功能,例如解析异常格式的日期,否则您可能会更好地选择使用 vanilla JavaScript 的答案之一。

          如果你使用的是 DateJS,这样的一行应该可以解决问题:

          Date.parse(startdate).add(1).days();
          

          你也可以使用 MomentJS,它有类似的功能 (http://momentjs.com/),但是我不太熟悉。

          【讨论】:

            【解决方案10】:

            用javascript在一行中添加一天

            注意:如果您想添加特定天数...只需将 1 替换为您想要的天数


            new Date(new Date().setDate(new Date().getDate() + 1))
            

            console.log(new Date(new Date().setDate(new Date().getDate() + 1)))

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-11-11
              • 2014-04-27
              • 1970-01-01
              • 1970-01-01
              • 2013-05-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多