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

Har*_*ldo 3 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"
Run Code Online (Sandbox Code Playgroud)

这对js来说甚至可能吗?

T.J*_*der 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("-");
}
Run Code Online (Sandbox Code Playgroud)

实例

请注意,setDate将正确处理滚动到下个月(如果需要,可以进行年度).

实例

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

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


Imr*_*rul 5

如果您使用jQuery 和 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);
Run Code Online (Sandbox Code Playgroud)

您可以以任何您想要的方式解析格式化,最重要的是您不需要在 JS 库中添加新函数。