【问题标题】:JavaScript add day(s)JavaScript 添加天数
【发布时间】:2012-07-31 07:10:32
【问题描述】:

如何在日期 31.07.2012 中添加一天(或 2 天)并以 dd.MM.yyyy 格式(与输入日期格式相同)返回结果?

【问题讨论】:

    标签: javascript date format add


    【解决方案1】:

    最好的方法是使用 javascript 日期对象。 javascirpt 中的date object 被初始化为 mm/dd/yyyy 或 Date(year,month-1, date)。也就是说,

    dateString = "31.07.2012"
    dateSplit = dateString.split('.') 
    date = new Date(dateSplit[2], dateSplit[1]-1, dateSplit[0])
    date.setDate(date.getDate()+2)
    newDateString = ((date.getDate() > 10) ? date.getDate() : ("0" + date.getDate())) + "." + ((date.getMonth()+1 > 10) ? date.getMonth()+1 : ("0" + (date.getMonth()+1))) + "." + (date.getFullYear())
    

    month-1 用于 Date(year,month-1, date) 因为月份以 0 开头

    结果是

    "02.08.2012"
    

    【讨论】:

    • The date object in javascirpt is initialized as mm/dd/yyyy,不,不是。 ES5 中只指定了一个string format,但事实并非如此。否则,它取决于实现。
    • @RobG 尝试日期 = 新日期(“07/31/2012”)。它将创建一个日期对象为“2012 年 7 月 31 日星期二 14:26:59 GMT+0530(印度标准时间)”。我没有说这是初始化日期对象的唯一方法。
    • ——解析非 ES5 中指定格式的字符串取决于实现。此外,并非所有正在使用的浏览器都支持 ES5 格式,因此不应依赖它。月/日/年格式是世界上极少数人所特有的,并且不受任何官方标准的支持。
    【解决方案2】:
        var numDaysToAdd = 2;
        var inputDateString = "31.07.2012";
        var resultDate = stringToDate(inputDateString);
        resultDate.setDate( resultDate.getDate()+numDaysToAdd );
        var result = dateToString( resultDate );
    
    
        alert(result);
    
        function stringToDate( aString )
        {
            var dateArray = aString.split(".");
            return new Date(dateArray[2],dateArray[1]-1,dateArray[0]);
        }
    
        function dateToString( aDate )
        {
            var date = aDate.getDate();
            date = (date > 9) ? date : "0"+date.toString();
    
            var month = aDate.getMonth()+1;
            month = (month > 9) ? month : "0"+month.toString();
    
            var year = aDate.getFullYear();
    
    
            return (date+"."+month+"."+year);
        }
    

    【讨论】:

    • 您也可以将这些函数添加到 Date.prototype 中。它会更面向对象
    • 哎呀,确实。我希望切换参数没什么大不了的:)。刚刚修好。
    【解决方案3】:
    /**
     * Format date (2012.08.31)
     */
    Date.prototype.format = function() {
       var yyyy = this.getFullYear().toString();
       var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
       var dd  = this.getDate().toString();
       return yyyy + '.' + (mm[1]?mm:"0"+mm[0]) + '.' + (dd[1]?dd:"0"+dd[0]); // padding
    }
    
    /**
     * Increase current time
     */
    Date.prototype.increase_days = function(days) {
        this.setTime(this.getTime() + (days * (1000 * 60 * 60 * 24)));
        return this;
    }
    
    //usage:
    var date = new Date();
    date.increase_days(2);
    console.log(date.format());
    

    【讨论】:

      【解决方案4】:

      假设inputDateString 格式为dd.mm.yyyy

      function addDaysToDate (inputDateString ,noOfDays ){ 
          var myDate=dateString.split(".");
          var newDate=myDate[1]+"/"+myDate[0]+"/"+myDate[2];
          var dateInMilliSec  = new Date(newDate).getTime();
          var addDaysToTime = new Date(dateInMilliSec + (86400000 * noOfDays));
          var dd = addDaysToTime.getDate();
          var MM = addDaysToTime.getMonth()+1;
          var yyyy = addDaysToTime.getFullYear();
          return dd+"."+MM+"."+yyyy;
      };
      

      【讨论】:

        【解决方案5】:

        这会帮你搞定的

        var d = "31.07.2012";
        d = d.split(".");
        date = new Date(d[2],d[1]-1,d[0]);
        date.setDate(date.getDate() + 2);
        document.body.innerHTML += (date.getDate() + "." + date.getMonth() + "." + (date.getFullYear()));
        

        【讨论】:

        • 您忘记从月份数中减去 1。
        猜你喜欢
        • 2020-04-04
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-27
        • 2012-02-20
        • 2023-03-04
        • 2018-11-11
        相关资源
        最近更新 更多