我正在尝试使用JavaScript in format (yyyy-mm-dd)获取特定日期的明天日期。例如,具体的日期是2021-08-31,我得到了这个脚本:
var date = "2021-08-31"
date = new Date(date.split("-")[0],date.split("-")[1],date.split("-")[2])
date.setDate(date.getDate() + 1);
var tomorrows_date_month = date.getMonth()
var tomorrows_date_day = date.getDate()
var tomorrows_date_year = date.getFullYear()
console.log(tomorrows_date_year + "-" + tomorrows_date_month + "-" + tomorrows_date_day)预期输出为:
2021-09-01但是这段代码的输出是:
2021-9-2发布于 2021-08-21 08:00:50
在内部,js月份存储为0到11之间的值,因此您需要将date.split("-")[1]减去1。否则,javascript会认为您的月份实际上是9月,我们知道"2021-09-32“被翻译为"2021-10-2",因此日期显示为"2”。
var date = "2021-08-31"
date = new Date(date.split("-")[0],date.split("-")[1] - 1,date.split("-")[2])
date.setDate(date.getDate() + 1)
var tomorrows_date_month = date.getMonth() + 1
var tomorrows_date_day = date.getDate()
var tomorrows_date_year = date.getFullYear()
console.log(tomorrows_date_year + "-" + tomorrows_date_month + "-" + tomorrows_date_day)还要注意,对于将字符串转换为Date对象,date = new Date("2021-08-31")就足够了。
发布于 2021-08-21 08:08:21
首先,您不需要将拆分的"2021-08-31"用作date参数,因此只需使用new Date("2021-08-31");
第二个注意,如果长度小于2,则需要使用d.getMonth() + 1并添加前导零
试试这个:
function formatDate(date) {
var d = new Date(date),
month = '' + (d.getMonth() + 1),
day = '' + d.getDate(),
year = d.getFullYear();
if (month.length < 2)
month = '0' + month;
if (day.length < 2)
day = '0' + day;
return [year, month, day].join('-');
}
Date.prototype.addDays = function(days) {
var date = new Date(this.valueOf());
date.setDate(date.getDate() + days);
return date;
}
var date = "2021-08-31"
var date1 = new Date(date);
console.log(formatDate(date1.addDays(1)));
发布于 2021-08-21 08:06:25
new Date(new Date(date + 'T00:00Z').getTime() + 86400000).toISOString().substr(0, 10)添加的'T00:00Z'确保日期被解析为协调时,以匹配toISOString()使用的协调时区。添加86400000 (一天中的毫秒数)会使日期提前,而不必直接处理日期字段。
https://stackoverflow.com/questions/68871146
复制相似问题