在不转换为 Javascript 中的纪元的情况下增加日期对象

Posted

技术标签:

【中文标题】在不转换为 Javascript 中的纪元的情况下增加日期对象【英文标题】:Increment Date Object in without converting to epoch in Javascript 【发布时间】:2021-08-27 22:20:03 【问题描述】:

是否可以在不将对象转换为纪元的情况下将日期对象增加一天?

例如传统方式会将日期对象转换为纪元:

var today = new Date();
var tomorrow = new Date(today.valueOf()); // copy date object without converting to epoch
tomorrow.setDate(tomorrow.getDate() + 1); // now gets converted to epoch :'(

【问题讨论】:

这能回答你的问题吗? Add days to javascript Date 【参考方案1】:

set* 方法不会“转换为纪元数”,它们会修改日期的内部时间值并返回修改后的值。日期对象仍然是日期。

let today = new Date();
today.setHours(0,0,0,0); // Start of day
let tvToday = +today;
let tomorrow = new Date(today);
// setDate adjusts the time value and returns it
let tvTomorrow = tomorrow.setDate(tomorrow.getDate() + 1);

console.log('Today\'s date: ' + today.toDateString());
console.log('Today\'s time value: ' + tvToday);

console.log('Tomorrow\'s date: ' + tomorrow.toDateString());
console.log('Tomorrow\'s time value: ' + tvTomorrow);

// May vary from 24 by up to 1 hour depending on crossing DST boundaries
console.log('Difference in hours: ' + ((tvTomorrow - tvToday)/3.6e6)); 

如果你想要一个添加一天并返回一个新 Date 对象的方法,请编写一个函数,可能名为 addDays,它需要一个日期和天数来添加并返回一个新 Date 对象随着天数的增加。很多库都有这样的功能,不难写。

【讨论】:

【参考方案2】:

不确定您是否可以在不转换的情况下做到这一点。也许之后转换回来。

var today = new Date();
var tomorrow = new Date(today.valueOf());

const x = tomorrow.setDate(tomorrow.getDate() + 1);
console.log(x) //epoch

const z = new Date(x)
console.log(z.toString())

【讨论】:

因为tomorrow.toString() 太短了? 我这样写是为了让程序清晰。

以上是关于在不转换为 Javascript 中的纪元的情况下增加日期对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在不转换为json的情况下将C#数组用于javascript数组?

在不更改字体的情况下将SVG转换为PNG

如何在不使用 ToString() 的情况下将 Int 转换为 C# 中的字符串?

在不使用熊猫的情况下将数据框转换为pyspark中的字典

Javascript将日期时间字符串转换为纪元

如何在不丢失小数的情况下将数据框中的字符转换为数字