javascript:如何将日期字符串(YYYY-MM-DD)增加1天

时间:2011-02-25 11:27:18

标签: javascript jquery

我知道如何在php中使用date()和mktime()函数,但不知道如何在javascript中完成同样的事情......

function incr_date(date_str){
    //...magic here
    return next_date_str;
}

var date_str = '2011-02-28';
console.log( incr_date(date_str) ); //want to output "2011-03-01"

这对js来说甚至可能吗?

7 个答案:

答案 0 :(得分:10)

首先解析它,然后使用dt.setDate(dt.getDate() + 1)。但是,您必须手动解析它,或者使用DateJS或类似的解析;并非所有主流浏览器都支持该格式(new Date(date_str) 无效可靠地跨浏览器;请参阅下面的注释。然后将其转换回您的格式。

这些方面的东西:

function incr_date(date_str){
  var parts = date_str.split("-");
  var dt = new Date(
    parseInt(parts[0], 10),      // year
    parseInt(parts[1], 10) - 1,  // month (starts with 0)
    parseInt(parts[2], 10)       // date
  );
  dt.setDate(dt.getDate() + 1);
  parts[0] = "" + dt.getFullYear();
  parts[1] = "" + (dt.getMonth() + 1);
  if (parts[1].length < 2) {
    parts[1] = "0" + parts[1];
  }
  parts[2] = "" + dt.getDate();
  if (parts[2].length < 2) {
    parts[2] = "0" + parts[2];
  }
  return parts.join("-");
}

Live example

请注意,setDate将正确处理下一个月(如有必要,还有年份)。

Live example

以上测试适用于IE6,IE7,IE8; Linux上的Chrome,Opera和Firefox; Windows上的Chrome,Opera,Firefox和Safari。

关于在JavaScript中支持此格式的说明:自2009年12月发布的ECMAScript 5th edition起,JavaScript中的new Date(string)构造函数最近才具有接受标准化的格式。您的格式将受支持当浏览器支持它时,但在撰写本文时,没有IE的发布版本(甚至IE8)都不支持它。其他最近的浏览器大多数都是。

答案 1 :(得分:4)

如果你正在使用 jQuery&amp; jQuery UI 然后使用以下内容:

var dt = $.datepicker.parseDate('yy-mm-dd', '2011-02-25');
dt.setDate(dt.getDate() + 1)
var dtNew = $.datepicker.formatDate('yy-mm-dd', dt);

您可以以任何方式parseformat,最重要的是,您的JS库中不需要新功能。

答案 2 :(得分:3)

首先,您需要将日期字符串转换为Date对象。

var date = new Date('2011-02-28');

然后你需要在日期的一天添加一个。

date.setDate(d.getDate() + 1);

虽然这看起来可能会在2月29日结束,但它不会也会在3月1日给你。

答案 3 :(得分:1)

我会在这里使用date.js - http://www.datejs.com/

有很多处理此类事情的功能。

答案 4 :(得分:1)

我修改了这个优秀的答案https://stackoverflow.com/a/5116693/4021614来处理任意数量的递增和递减(使用此方法https://stackoverflow.com/a/25114400/4021614)。

function incrementDate(date_str, incrementor) {
    var parts = date_str.split("-");
    var dt = new Date(
        parseInt(parts[0], 10),      // year
        parseInt(parts[1], 10) - 1,  // month (starts with 0)
        parseInt(parts[2], 10)       // date
    );
    dt.setTime(dt.getTime() + incrementor * 86400000);
    parts[0] = "" + dt.getFullYear();
    parts[1] = "" + (dt.getMonth() + 1);
    if (parts[1].length < 2) {
        parts[1] = "0" + parts[1];
    }
    parts[2] = "" + dt.getDate();
    if (parts[2].length < 2) {
        parts[2] = "0" + parts[2];
    }
    return parts.join("-");
};

示例:

//increment by 7 days
incrementDate('2015-01-01', 7);
//returns '2015-01-08'

//decrement by 1 day
incrementDate('2015-01-01', -1);
//returns '2014-12-31'

答案 5 :(得分:0)

是。首先,您阅读日期并转换为日期对象,然后添加1天并返回结果

function incrementDate(date_str) {
    var date = new Date(date_str);
    date.setDate(date.getDate() + 1);
    return date.getFullYear() + '-' + date.getMonth() + '-' + date.getDate();
}

javascript中的Date object本机可以解决因闰年等问题而产生的所有问题。

答案 6 :(得分:0)

  

我希望这会有所帮助

function incr_date(date_str,no_of_days_to_add){
 var futureDate=new Date(date_str);

  futureDate.setDate(new Date().getDate()+no_of_days_to_add);
  var next_date_str= futureDate;

    return next_date_str;
}