【问题标题】:Issues with incrementing Timestamp (YYYY-MM-DDTHH:MM:SS) in JS在 JS 中增加时间戳 (YYYY-MM-DDTHH:MM:SS) 的问题
【发布时间】:2020-10-22 18:20:23
【问题描述】:

我正在尝试以格式 (YYYY-MM-DDTHH:MM:SS) 将时间戳的时间增加 1 小时。直到时间是 22:00:00,这工作得很好。但是,当输入时间为 23:00:00 时,时间分量正确更改为 00:00:00,但相应的日期会增加到一个多月(跳 1 个整月)。前任。 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());

【问题讨论】:

  • 使用内置的Date对象

标签: javascript date time timestamp


【解决方案1】:

为什么会出现所有这些并发症? 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());

【讨论】:

  • 非常感谢 - 这工作得很好。只是一个简单的问题-如何以 'YYYY-MM-DDTHH:MM:SS' 的格式取回它?目前显示为 Sat Aug 01 2020 00:00:00
  • .toISOString() 应该给你你想要的格式也不要忘记将答案标记为已接受
  • 不要使用内置解析器。比较 Safari 与其他浏览器中的结果,请参阅 JavaScript Date() inconsistence with Safari's and non-Safari implementationWhy does Date.parse give incorrect results?
  • 按照您上面所说的添加 1 小时后,我无法将其恢复为 YYYY-MM_DDTHH:MM:SS 的格式。你能帮忙吗? .toISOString() 无法进入这种格式。
【解决方案2】:

您的问题是您认为的那个月份是 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

【讨论】:

    【解决方案3】:

    您将 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 这样的库。日期很难,你总会找到极端情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      相关资源
      最近更新 更多