【问题标题】:Trying to add 3 days in Milliseconds to current Date试图以毫秒为单位将 3 天添加到当前日期
【发布时间】:2012-10-09 08:22:02
【问题描述】:
var dateObj = new Date();
var val = dateObj.getTime();
//86400 * 1000 * 3  Each day is 86400 seconds
var  days = 259200000;

val = val + days;
dateObj.setMilliseconds(val);
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear();
alert(val);

我正在尝试获取当前日期,添加三天毫秒,并在当前日期后 3 天显示日期戳。例如 - 如果今天是 10/09/2012,那么我想说 10/12/2012。

这种方法行不通,我要数月数天了。有什么建议吗?

【问题讨论】:

  • 我认为你想要 setTime 而不是 setMilliseconds
  • 尝试:dateObj.setTime(dateObj.getTime() + 8.64e7*3) 但请注意夏令时转换可能会产生意想不到的结果。只需将 3 添加到日期就更简单了:dateObj.setDate(dateObj.getDate() + 3).

标签: javascript date


【解决方案1】:

要添加时间,请获取当前日期,然后添加以毫秒为单位的具体时间量,然后使用该值创建一个新日期:

// get the current date & time (as milliseconds since Epoch)
const currentTimeAsMs = Date.now();

// Add 3 days to the current date & time
//   I'd suggest using the calculated static value instead of doing inline math
//   I did it this way to simply show where the number came from
const adjustedTimeAsMs = currentTimeAsMs + (1000 * 60 * 60 * 24 * 3);

// create a new Date object, using the adjusted time
const adjustedDateObj = new Date(adjustedTimeAsMs);

进一步解释这一点; dataObj.setMilliseconds() 不起作用的原因是因为它将 dateobj 的毫秒属性设置为指定值(0 到 999 之间的值)。它不会将对象的日期设置为毫秒。

// assume this returns a date where milliseconds is 0
dateObj = new Date();

dateObj.setMilliseconds(5);
console.log(dateObj.getMilliseconds()); // 5

// due to the set value being over 999, the engine assumes 0
dateObj.setMilliseconds(5000);
console.log(dateObj.getMilliseconds()); // 0

参考资料:
Date.now()
new Date()
Date.setMilliseconds()

【讨论】:

  • 我只是 var days = 259200000 因为它是静态的并且永远不会改变。谢谢!很好奇,为什么 setMilliseconds(days) 不做同样的事情?
  • 我真的不知道。我只是从经验中知道它是否是静态值,然后像上面一样进行计算。
  • 由于这是(一年后)为日期添加毫秒的第一项,setMilliseconds 不起作用的原因是它设置了日期对象的毫秒部分。因此,在正常操作中,它需要一个从 0 到 999 的数字。但是,它允许任何数字,就像将值添加到日期中而没有日期的前一个毫秒部分。
  • 这个例子真的很令人困惑,因为你使用var dateObj首先存储毫秒数(来自Date.now()),然后使用dateObj = new Date(dateObj);在其中存储一个Date对象。对于那些不知道 Date.now() 如何工作的人来说,使用单独的变量会更清楚,或者可能一直坚持使用 Date 对象并使用 Date.getTime() 来增加毫秒。
  • @pseudocoder 我已经编辑了示例以使用不同的变量。
【解决方案2】:

试试这个:

var dateObj = new Date(Date.now() + 86400000 * 3);

JavaScript 中的日期精确到毫秒,因此1000 是 1 秒。
一分钟有 60 秒,一小时有 60 分钟,一天有 24 小时。

因此,一天是:1000 * 60 * 60 * 24,即86400000 毫秒。

Date.now() 返回当前时间戳,精确到毫秒。
我们将该时间戳以及增加的 3 天毫秒数传递给 new Date(),当使用数字调用时,它会根据提供的时间戳创建一个 Date 对象。

【讨论】:

  • 将毫秒表示为1000 * 60 * 60 * 24 * 3imo 会更清楚
【解决方案3】:

如果您需要在 javascript 中进行日期计算,请使用 moment.js:

moment().add(3, 'days').calendar();

【讨论】:

  • 无意冒犯您,但建议使用整个库来执行如此简单的任务似乎太过分了。
  • 无意冒犯,当其他人阅读我的代码时,他可能会比接受的答案更好地理解 moment.js 一行。
  • 这个任务没有什么“简单”的。考虑夏令时的变化。
【解决方案4】:

使用此代码

var dateObj = new Date(); 
var val = dateObj.getTime(); 
//86400 * 1000 * 3  Each day is 86400 seconds 
var  days = 259200000; 

val = val + days; 
dateObj = new Date(val); // ********important*********//
val = dateObj.getMonth() + 1 + "/" + dateObj.getDate() + "/" + dateObj.getFullYear(); 
alert(val);

【讨论】:

  • 这个答案没有考虑夏令时。如果您指定初始日期:var dateObject = new Date('Nov 2 2019'),加上 3 天,您将获得 2019 年 11 月 4 日(含),它跨越 DST。但是如果你从 var dateObj = new Date('Nov 4 2019');您将获得 2019 年 11 月 7 日,包括 4 天。任何想法如何考虑 DST?
【解决方案5】:

如果您想对更任意的Date 对象(.now() 除外)执行此操作,您可以使用类似:

const initialDate = new Date("March 20, 2021 19:00");

const millisecondsToAdd = 30 * 24 * 60 * 60 * 1000; //30 days in milliseconds

const expiryDate = new Date(initialDate.valueOf() + millisecondsToAdd);

【讨论】:

    猜你喜欢
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2012-01-15
    • 2010-10-02
    相关资源
    最近更新 更多