停止日期到纪元的转换 javascript

Stop date to epoch conversion in javascript

我有一个代码,我尝试将日期设置为从服务器上的当前日期往后 20 天。我在 javascript 中使用了一个变量(比如 dateRange)来获取当前日期。但是在第二次为 setDate() 函数使用相同的变量时 dateRange 的值被更改为 epoch从日期。我知道我可以将纪元转换为日期并继续,但有没有办法停止这种自动转换。

var dateRange=new Date(currentDate);  
dateRange = dateRange.setDate(dateRange.getDate() - 20);

setDate 修改日期对象,returns 修改纪元值。只是不要在dateRange中保存epoch值,这样修改后就可以使用date对象了:

var currentDate = new Date();
var dateRange = new Date(+currentDate);
console.log(dateRange.toISOString());
dateRange.setDate(dateRange.getDate() - 20);
console.log(dateRange.toISOString());


旁注:通过 var dateRange = new Date(currentDate); is/was 复制日期在某些浏览器上不可靠。在上面,我将其更改为 var dateRange = new Date(+currentDate);(注意 +,将日期转换为其纪元值),这是可靠的。

内部日期存储为距纪元日期的毫秒数。 要实现您正在尝试做的事情,您可以减去对应于 20 天的毫秒数:

var currentDate = "2019-07-29T07:14:57.269Z";
var dateRange = new Date(currentDate);  

var pastDate = new Date(dateRange - 1000 * 60 * 60 * 24 * 20);

console.log('current', currentDate);
console.log('20 days ago', pastDate);

无论如何,如果您在应用程序中进行大量 date/time 操作,我建议您使用此库:https://momentjs.com/