我想为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
我看到一个示例对日期进行一些数学运算,是否应该分别计算时间戳?
谢谢〜
答案 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 javascript和Add 30 days to date (mm/dd/yy)的答案的解决方案。这份指南“ The Definitive Guide to DateTime Manipulation”通过更多地了解DateTime操作来帮助找出我错了。