首页 文章

将日期添加到JavaScript日期

提问于
浏览
786

如何使用JavaScript将日期添加到当前 Date . JavaScript是否具有内置函数,如.Net的 AddDay

30 回答

  • 4

    我使用类似的东西:

    new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)
    

    适用于节省日期的时间:

    new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
    

    适用于新的一年:

    new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)
    

    它可以参数化:

    function DateAdd(source, amount, step) {
      var factor = 1;
      if (step == "day") factor = 24 * 60 * 60 * 1000;
      else if (step == "hour") factor = 60 * 60 * 1000;
      ...
      new Date(source.getTime() + amount * factor);
    }
    
  • 5

    尝试

    var someDate = new Date();
    var duration = 2; //In Days
    someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));
    

    使用setDate()添加日期不会解决您的问题,尝试添加一些日期到2月份,如果您尝试添加新的日期,它不会导致您的预期 .

  • 9
    function addDays(n){
        var t = new Date();
        t.setDate(t.getDate() + n); 
        var month = "0"+(t.getMonth()+1);
        var date = "0"+t.getDate();
        month = month.slice(-2);
        date = date.slice(-2);
         var date = date +"/"+month +"/"+t.getFullYear();
        alert(date);
    }
    
    addDays(5);
    
  • 69

    老我知道,但有时我喜欢这个:

    function addDays(days) {
        return new Date(Date.now() + 864e5 * days);
    }
    
  • 2

    最简单的解决方案 .

    Date.prototype.addDays = function(days) {
       this.setDate(this.getDate() + parseInt(days));
       return this;
     };
    
     // and then call
    
     var newDate = new Date().addDays(2); //+2 days
     console.log(newDate);
    
     // or
    
     var newDate1 = new Date().addDays(-2); //-2 days
     console.log(newDate1);
    
  • 7

    我提出的解决方案在夏令时方面存在问题 .

    通过使用 getUTCDate / setUTCDate ,我解决了我的问题 .

    // Curried, so that I can create helper functions like `add1Day`
    const addDays = num => date => {
      // Make a working copy so we don't mutate the supplied date.
      const d = new Date(date);
    
      d.setUTCDate(d.getUTCDate() + num);
    
      return d;
    }
    
  • 1

    试试这个

    function addDays(date,days) {        
          var one_day=1000*60*60*24; 
          return new Date(date.getTime()+(days*one_day)).toLocaleDateString(); 
        }
    
  • 6

    您可以创建一个: -

    Date.prototype.addDays = function(days) {
        var date = new Date(this.valueOf());
        date.setDate(date.getDate() + days);
        return date;
    }
    
    var date = new Date();
    
    alert(date.addDays(5));
    

    如有必要,这会自动增加月份 . 例如:

    8/31 1天将成为 9/1 .

    直接使用 setDate 的问题在于它是一个变异器,最好避免这种情况 . ECMA认为将 Date 视为可变类而不是不可变结构 .

  • 3

    感谢Jason的回答,按预期工作,这里是您的代码和AnthonyWJones的便捷格式的混合:

    Date.prototype.addDays = function(days){
        var ms = new Date().getTime() + (86400000 * days);
        var added = new Date(ms);
        return added;
    }
    
  • 2

    不,javascript没有内置函数,但您可以使用简单的代码行

    timeObject.setDate(timeObject.getDate() + countOfDays);
    
  • 18

    这些答案让我感到困惑,我更喜欢:

    var ms = new Date().getTime() + 86400000;
    var tomorrow = new Date(ms);
    

    getTime()给出了自1970年以来的毫秒数,86400000是一天中的毫秒数 . 因此,ms包含所需日期的毫秒数 .

    使用毫秒构造函数提供所需的日期对象 .

  • 4

    只是花了很多年的时间试图弄清楚当年的交易是什么,而不是在遵循下面的主要示例时添加 .

    如果你只是想在你拥有的日期添加n天,你最好去:

    myDate.setDate(myDate.getDate()n);

    或者是longwinded版本

    var theDate = new Date(2013, 11, 15);
    var myNewDate = new Date(theDate);
    myNewDate.setDate(myNewDate.getDate() + 30);
    console.log(myNewDate);
    

    这个今天/明天的事情令人困惑 . 通过将当前日期设置为新的日期变量,您将弄乱年份值 . 如果你从原来的日期工作,你就不会 .

  • 152

    我昨晚创建了这些扩展:
    你可以传递正面或负面 Value ;

    例:

    var someDate = new Date();
    var expirationDate = someDate.addDays(10);
    var previous = someDate.addDays(-5);
    
    
    Date.prototype.addDays = function (num) {
        var value = this.valueOf();
        value += 86400000 * num;
        return new Date(value);
    }
    
    Date.prototype.addSeconds = function (num) {
        var value = this.valueOf();
        value += 1000 * num;
        return new Date(value);
    }
    
    Date.prototype.addMinutes = function (num) {
        var value = this.valueOf();
        value += 60000 * num;
        return new Date(value);
    }
    
    Date.prototype.addHours = function (num) {
        var value = this.valueOf();
        value += 3600000 * num;
        return new Date(value);
    }
    
    Date.prototype.addMonths = function (num) {
        var value = new Date(this.valueOf());
    
        var mo = this.getMonth();
        var yr = this.getYear();
    
        mo = (mo + num) % 12;
        if (0 > mo) {
            yr += (this.getMonth() + num - mo - 12) / 12;
            mo += 12;
        }
        else
            yr += ((this.getMonth() + num - mo) / 12);
    
        value.setMonth(mo);
        value.setYear(yr);
        return value;
    }
    
  • 41

    对于那些使用Angular的人:

    做就是了:

    $scope.booking.totTijd.setMinutes($scope.booking.totTijd.getMinutes()+15);
    $scope.booking.totTijd.setDate($scope.booking.totTijd.getDate() + 1);
    
  • 893

    如果可以,请使用moment.js . JavaScript没有_152148的语法:

    var nextWeek = moment().add(7, 'days');
    alert(nextWeek);
    
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>
    

    参考:http://momentjs.com/docs/#/manipulating/add/

  • 2

    晚会,但如果你使用jQuery,那么有一个很棒的插件叫做Moment:

    http://momentjs.com/

    var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();
    

    http://momentjs.com/docs/#/manipulating/

    还有很多其他好东西!

    编辑:感谢aikeru的评论删除了jQuery参考

  • 5

    有一个setDate和一个getDate方法,允许你做这样的事情:

    var newDate = aDate.setDate(aDate.getDate() + numberOfDays);
    

    如果您想要以人类可读的格式减去天数并格式化日期,则应考虑创建一个如下所示的自定义 DateHelper 对象:

    var DateHelper = {
        addDays : function(aDate, numberOfDays) {
            aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
            return aDate;                                  // Return the date
        },
        format : function format(date) {
            return [
               ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
               ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
               date.getFullYear()                          // Get full year
            ].join('/');                                   // Glue the pieces together
        }
    }
    
    // With this helper, you can now just use one line of readable code to :
    // ---------------------------------------------------------------------
    // 1. Get the current date
    // 2. Add 20 days
    // 3. Format it
    // 4. Output it
    // ---------------------------------------------------------------------
    document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));
    

    (另见this Fiddle

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

    CodePen

    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>
    New: <strong>'); document.write(newDate);
  • 1

    我们的团队认为date-fns是这个领域最好的图书馆 . 它将日期视为 immutableMoment.js will probably never adopt immutability),它更快,并且可以模块化加载 .

    const newDate = DateFns.addDays(oldDate, 2);
    
  • 6

    我想我也会给出答案:
    就个人而言,我喜欢尝试避免无偿的变量声明,方法调用和构造函数调用,因为它们在性能上都很昂贵 . (理所当然地)
    我打算在@AnthonyWJones给出的答案下留下这个评论,但是考虑得更好 .

    // Prototype usage...
    Date.prototype.addDays = Date.prototype.addDays || function( days ) {
        return this.setTime( 864E5 * days + this.valueOf() ) && this;
    };
    
    // Namespace usage...
    namespace.addDaysToDate = function( date, days ) {
        return date.setTime( 864E5 * days + date.valueOf() ) && date;
    };
    
    // Basic Function declaration...
    function addDaysToDate( date, days ) {
        return date.setTime( 864E5 * days + date.valueOf() ) && date;
    };
    

    以上将尊重夏令时 . 这意味着如果您添加跨越DST的天数,则显示的时间(小时)将更改以反映该情况 .
    例:
    2014年11月2日02:00是DST的结束 .

    var dt = new Date( 2014, 10, 1, 10, 30, 0 );
    console.log( dt );                  // Sat Nov 01 2014 10:30:00
    console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00
    

    如果您希望保留DST的时间(所以10:30仍然是10:30)...

    // Prototype usage...
    Date.prototype.addDays = Date.prototype.addDays || function( days ) {
        return this.setDate( this.getDate() + days ) && this;
    };
    
    // Namespace usage...
    namespace.addDaysToDate = function( date, days ) {
        return date.setDate( date.getDate() + days ) && date;
    };
    
    // Basic Function declaration...
    function addDaysToDate( date, days ) {
        return date.setDate( date.getDate() + days ) && date;
    };
    

    那么,现在你有......

    var dt = new Date( 2014, 10, 1, 10, 30, 0 );
    console.log( dt );                  // Sat Nov 01 2014 10:30:00
    console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00
    
  • 7

    Edit: 而不是 setTime() (或 setHours() )你可以这样做:

    Date.prototype.addDays= function(d){
      this.setDate(this.getDate() + d);
      return this;
    };
    
    var tomorrow = new Date().addDays(1);
    

    Old:

    而不是使用 setTime() ,您可以使用 setHours()

    Date.prototype.addDays= function(d){
        this.setHours(this.getHours() + d * 24);
        return this;
    };
    
    var tomorrow = new Date().addDays(1);
    

    the JSFiddle ......

  • 22

    我的简单解决方案是:

    nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);
    

    这个解决方案没有夏令时的问题 . 此外,可以添加/分配任何年,月,日等的偏移量 .

    day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);
    

    是正确的代码 .

  • 10
    //the_day is 2013-12-31
        var the_day = Date.UTC(2013, 11, 31); 
        // Now, the_day will be "1388448000000" in UTC+8; 
        var the_next_day = new Date(the_day + 24 * 60 * 60 * 1000);
        // Now, the_next_day will be "Wed Jan 01 2014 08:00:00 GMT+0800"
    
  • 4

    你可以使用JavaScript,不需要jQuery:

    var someDate = new Date();
    var numberOfDaysToAdd = 6;
    someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
    Formatting to dd/mm/yyyy :
    
    var dd = someDate.getDate();
    var mm = someDate.getMonth() + 1;
    var y = someDate.getFullYear();
    
    var someFormattedDate = dd + '/'+ mm + '/'+ y;
    
  • 598
    var today = new Date();
    var tomorrow = new Date();
    tomorrow.setDate(today.getDate()+1);
    

    要小心,因为这可能很棘手 . 设置“明天”时,它只能起作用,因为它的当前值与“今天”的年份和月份相匹配 . 但是,设置为“32”之类的日期数字通常仍可正常工作,以便将其移至下个月 .

  • 2

    setDate()的mozilla文档并不表示它将处理月末场景 . 见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

    设置日期()

    • 根据当地时间设置指定日期的月中某天(1-31) .

    这就是我需要添加天数时使用setTime()的原因 .

  • 67

    我使用以下内容解 .

    var msInDay = 86400000;
    var daysToAdd = 5;
    var now = new Date();
    var milliseconds = now.getTime();
    var newMillisecods = milliseconds + msInDay * daysToAdd;
    var newDate = new Date(newMillisecods);
    //or now.setTime(newMillisecods);
    

    Date有一个接受int的构造函数 . 此参数表示1970年1月1日之前/之后的总毫秒数 . 它还有一个方法setTime,它在不创建新Date对象的情况下执行相同操作 .

    我们在这里做的是将天数转换为毫秒,并将此值添加到getTime提供的值 . 最后,我们将结果赋予Date(毫秒)构造函数或setTime(毫秒)方法 .

  • 1

    Correct Answer

    function addDays(date, days) {
      var result = new Date(date);
      result.setDate(result.getDate() + days);
      return result;
    }
    

    Incorrect Answer

    这个答案有时会提供正确的结果,但往往会返回错误的年份和月份 . 此答案唯一有效的时间是您添加天数的日期恰好具有当前年份和月份 .

    // Don't do it this way!
    function addDaysWRONG(date, days) {
      var result = new Date();
      result.setDate(date.getDate() + days);
      return result;
    }
    

    Proof / Example

    Check this JsFiddle

    // Correct
    function addDays(date, days) {
        var result = new Date(date);
        result.setDate(result.getDate() + days);
        return result;
    }
    
    // Bad Year/Month
    function addDaysWRONG(date, days) {
        var result = new Date();
        result.setDate(date.getDate() + days);
        return result;
    }
    
    // Bad during DST
    function addDaysDstFail(date, days) {
        var dayms = (days * 24 * 60 * 60 * 1000);
        return new Date(date.getTime() + dayms);    
    }
    
    // TEST
    function formatDate(date) {
        return (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
    }
    
    $('tbody tr td:first-child').each(function () {
        var $in = $(this);
        var $out = $('<td/>').insertAfter($in).addClass("answer");
        var $outFail = $('<td/>').insertAfter($out);
        var $outDstFail = $('<td/>').insertAfter($outFail);
        var date = new Date($in.text());
        var correctDate = formatDate(addDays(date, 1));
        var failDate = formatDate(addDaysWRONG(date, 1));
        var failDstDate = formatDate(addDaysDstFail(date, 1));
    
        $out.text(correctDate);
        $outFail.text(failDate);
        $outDstFail.text(failDstDate);
        $outFail.addClass(correctDate == failDate ? "right" : "wrong");
        $outDstFail.addClass(correctDate == failDstDate ? "right" : "wrong");
    });
    
    body {
        font-size: 14px;
    }
    
    table {
        border-collapse:collapse;
    }
    table, td, th {
        border:1px solid black;
    }
    td {
        padding: 2px;
    }
    
    .wrong {
        color: red;
    }
    .right {
        color: green;
    }
    .answer {
        font-weight: bold;
    }
    
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <table>
        <tbody>
            <tr>
                <th colspan="4">DST Dates</th>
            </tr>
            <tr>
                <th>Input</th>
                <th>+1 Day</th>
                <th>+1 Day Fail</th>
                <th>+1 Day DST Fail</th>
            </tr>
            <tr><td>03/10/2013</td></tr>
            <tr><td>11/03/2013</td></tr>
            <tr><td>03/09/2014</td></tr>
            <tr><td>11/02/2014</td></tr>
            <tr><td>03/08/2015</td></tr>
            <tr><td>11/01/2015</td></tr>
            <tr>
                <th colspan="4">2013</th>
            </tr>
            <tr>
                <th>Input</th>
                <th>+1 Day</th>
                <th>+1 Day Fail</th>
                <th>+1 Day DST Fail</th>
            </tr>
            <tr><td>01/01/2013</td></tr>
            <tr><td>02/01/2013</td></tr>
            <tr><td>03/01/2013</td></tr>
            <tr><td>04/01/2013</td></tr>
            <tr><td>05/01/2013</td></tr>
            <tr><td>06/01/2013</td></tr>
            <tr><td>07/01/2013</td></tr>
            <tr><td>08/01/2013</td></tr>
            <tr><td>09/01/2013</td></tr>
            <tr><td>10/01/2013</td></tr>
            <tr><td>11/01/2013</td></tr>
            <tr><td>12/01/2013</td></tr>
            <tr>
                <th colspan="4">2014</th>
            </tr>
            <tr>
                <th>Input</th>
                <th>+1 Day</th>
                <th>+1 Day Fail</th>
                <th>+1 Day DST Fail</th>
            </tr>
            <tr><td>01/01/2014</td></tr>
            <tr><td>02/01/2014</td></tr>
            <tr><td>03/01/2014</td></tr>
            <tr><td>04/01/2014</td></tr>
            <tr><td>05/01/2014</td></tr>
            <tr><td>06/01/2014</td></tr>
            <tr><td>07/01/2014</td></tr>
            <tr><td>08/01/2014</td></tr>
            <tr><td>09/01/2014</td></tr>
            <tr><td>10/01/2014</td></tr>
            <tr><td>11/01/2014</td></tr>
            <tr><td>12/01/2014</td></tr>
            <tr>
                <th colspan="4">2015</th>
            </tr>
            <tr>
                <th>Input</th>
                <th>+1 Day</th>
                <th>+1 Day Fail</th>
                <th>+1 Day DST Fail</th>
            </tr>
            <tr><td>01/01/2015</td></tr>
            <tr><td>02/01/2015</td></tr>
            <tr><td>03/01/2015</td></tr>
            <tr><td>04/01/2015</td></tr>
            <tr><td>05/01/2015</td></tr>
            <tr><td>06/01/2015</td></tr>
            <tr><td>07/01/2015</td></tr>
            <tr><td>08/01/2015</td></tr>
            <tr><td>09/01/2015</td></tr>
            <tr><td>10/01/2015</td></tr>
            <tr><td>11/01/2015</td></tr>
            <tr><td>12/01/2015</td></tr>
        </tbody>
    </table>
    
  • 5

    您可以在此处创建自定义帮助程序功能

    function plusToDate(currentDate, unit, howMuch) {
    
        var config = {
            second: 1000, // 1000 miliseconds
            minute: 60000,
            hour: 3600000,
            day: 86400000,
            week: 604800000,
            month: 2592000000, // Assuming 30 days in a month
            year: 31536000000 // Assuming 365 days in year
        };
    
        var now = new Date(currentDate);
    
        return new Date(now + config[unit] * howMuch);
    }
    
    var today = new Date();
    var theDayAfterTommorow = plusToDate(today, 'day', 2);
    

    顺便说一下,这是一个通用的解决方案,可以随时添加几秒或几分钟或几天 .

  • 15

    非常简单的代码,可以在java脚本中添加日期 .

    var d = new Date();
    d.setDate(d.getDate() + prompt('how many days you want to add write here'));
    alert(d);
    

相关问题