我尝试以(YYYY-MM-DDTHH:MM:SS)格式将时间戳的时间增加1小时。在时间22:00:00之前,这个方法工作得很好。但是,当输入时间为23:00:00时,时间组件会正确地更改为00:00:00,但是相应的日期会递增到一个月以上(跳过一个完整的月)。例如。2020-07-31T23:00:00更改为2020-09-01T00:00:00。这方面的任何帮助都是非常感谢的。
var sdate = '2020-07-31T23:00:00';
var temp1 = sdate.split('T');
document.write(temp1);
var d = temp1[0].split('-');
var t = temp1[1].split(':');
document.write("<br />");
document.write(d);
document.write("<br />");
document.write(t);
var dt3 = new Date(d[0], d[1], d[2], t[0], t[1], t[2], 0);
var dt4 = dt3.setSeconds(dt3.getSeconds() + 3600);
var final = new Date(dt4);
document.write("<br />");
document.write(final);
document.write("<br />");
document.write(final.getFullYear());
document.write("<br />");
document.write(final.getMonth());
document.write("<br />");
document.write(final.getDate());
document.write("<br />");
document.write(final.getHours());
document.write("<br />");
document.write(final.getMinutes());
document.write("<br />");
document.write(final.getSeconds());
发布于 2020-07-02 07:51:36
为什么会有这么复杂的情况?JS有自己的Date Object
您只需通过以下操作即可实现将小时数加1:
var sdate = new Date('2020-07-31T23:00:00');
console.log(sdate.toISOString());
sdate.setHours(sdate.getHours()+1)
console.log(sdate.toISOString());
发布于 2020-07-02 07:53:37
你的问题是,你认为月份是7月实际上是8月,因为javacript构造函数上的月份数字是0索引的,所以在这一行:
var dt3= new Date(d[0], d[1], d[2], t[0], t[1], t[2], 0);
您正在设置8月31日有关更多信息,请访问https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
发布于 2020-07-02 10:05:03
您将7作为月份传递给构造函数,但是月计数从0开始,所以您认为是7月,但实际上已经是8月了!光阴似箭。
因此,这意味着当你增加一个小时,你会超过午夜进入九月。
var sdate = '2020-07-31T23:00:00';
var temp1 = sdate.split('T');
document.write(`date I think I am starting with: ${sdate}`);
var d = temp1[0].split('-');
var t = temp1[1].split(':');
var dt3= new Date(d[0], d[1], d[2], t[0], t[1], t[2], 0);
document.write("<br />");
document.write(`date I am actually starting with: ${dt3.toISOString()}`);
要获得更一致的结果,请使用像moment.js这样的库。约会是很难的,而且你总能找到合适的案例。
https://stackoverflow.com/questions/62691454
复制