我知道如何在 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 实现吗?
最佳答案
首先解析它,然后使用 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("-");
}
请注意,setDate
将正确处理滚动到下个月(必要时还包括下一年)的问题。
以上内容已经过测试,适用于 IE6、IE7、IE8; Linux 上的 Chrome、Opera 和 Firefox; Windows 上的 Chrome、Opera、Firefox 和 Safari。
关于在 JavaScript 中支持这种格式的注释:JavaScript 中的 new Date(string)
构造函数直到最近才有了它可以接受的标准化格式,截至 ECMAScript 5th edition。于 2009 年 12 月发布。当浏览器支持时,您的格式将被支持,但在撰写本文时,没有已发布的 IE 版本(甚至 IE8)不支持它。其他最近的浏览器大多这样做。
关于javascript:如何将日期字符串 (YYYY-MM-DD) 增加 1 天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116657/