根据当前时间而不是源日期计算的时间戳

时间:2018-08-10 05:54:13

标签: javascript datetime

我想为Date添加30天(包括时间戳),但是,时间戳是根据脚本的执行时间而不是源数据(loadStartDateTime)计算的。

我创建了一个新的日期对象,然后设置日期(purge_date = loadStartDateTime + 30days)。

我看到一个示例对日期进行一些数学运算,是否应该分别计算时间戳?

PURGEDATE = (function (loadTime) { 
var loadDate = new Date(loadTime);
var purge_date = new Date();
purge_date.setDate(loadDate.getDate()+30);

var month = purge_date.getMonth() + 1;
var mm = month < 10 ? "0" + month : month;
var day = purge_date.getDate();
var dd = day < 10 ? "0" + day : day;  
var hours = purge_date.getHours() < 10 ? "0" + purge_date.getHours() : purge_date.getHours();
var minutes = purge_date.getMinutes() < 10 ? "0" + purge_date.getMinutes() : purge_date.getMinutes();
var seconds = purge_date.getSeconds() < 10 ? "0" + purge_date.getSeconds() : purge_date.getSeconds();
var time = hours + ":" + minutes + ":" + seconds;
var yyyy = purge_date.getFullYear(); 

return mm + "/" + dd + "/" + yyyy + time;
})(LoadStartDateTime)

结果:

loadStartDateTime | PurgeDate
  2018年8月7日下午5:55:45 | 09/06/2018 10:28:49
  8/7/2018 5:58:10 PM | 09/06/2018 10:28:49

我看到一个示例对日期进行一些数学运算,是否应该分别计算时间戳?

谢谢〜

1 个答案:

答案 0 :(得分:0)

进一步调查后,我意识到:

Date对象的构造函数为ISO 8601 当我使用getDate()时,我没有明确提供时区。 这将导致时间戳为本地时间00:00:00,因此我应该改用getTime()方法获取时间戳。由于在JavaScript中时间戳是毫秒数,因此一种简单的实现方法是在Date构造函数中发送时间戳值。要计算以时间戳记的30天:

  30 * 24 * 60 * 60 * 1000

最后,将两个值求和并将结果作为参数发送给构造函数:

例如:

loadStartDateTime = new Date('8/7/2018 5:55:45 PM'); 
test_date = loadStartDateTime.getTime() + (30 * 24 * 60 * 60 * 1000);
test_date = new Date(test_date);

,然后可以继续进行日期格式设置。

我找到了结合ISO 8601 date format - Add day with javascriptAdd 30 days to date (mm/dd/yy)的答案的解决方案。这份指南“ The Definitive Guide to DateTime Manipulation”通过更多地了解DateTime操作来帮助找出我错了。