【问题标题】:Javascript - Set date 30 days from nowJavascript - 从现在起设置日期 30 天
【发布时间】:2011-10-26 19:55:04
【问题描述】:

我需要设置一个从现在起 30 天的日期,同时考虑到 28、29、30、31 天这样的月份,这样它就不会跳过任何日子,而是显示从现在起正好 30 天。我该怎么做?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

JavaScript "Date()" 对象已经为您提供:

var future = new Date();
future.setDate(future.getDate() + 30);

那只会做正确的事。 (日期的 getter/setter 具有它们的名称,这有点令人困惑。)

【讨论】:

  • 我认为这行不通,至少根据文档:developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…setDate 的参数应该在 1 到 31 之间。但是,我记得曾经使用过它工作,所以......也许它确实......
  • 添加 new Date(future.setDate(future.getDate() + 30)).toString(); 对我有用。
  • 它按描述工作,但您必须使用本机 JavaScript (var future) 变量。按预期为我工作。
  • 这对我有用,但 get/setDate 指的是一个月中的哪一天,这似乎不必要地令人困惑 (developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…)。如需替代方案,请参阅我的答案。
  • 它有效,它以毫秒为单位返回日期。 newDate(future.setDate(future.getDate() + 30)) 以正确的 d/m/y 格式返回..谢谢
【解决方案2】:

使用语法简单且没有外部库的原生 Date 对象:

var future = new Date('Jan 1, 2014');

future.setTime(future.getTime() + 30 * 24 * 60 * 60 * 1000); // Jan 31, 2014

日期 setTime 和 getTime 函数使用自 1970 年 1 月 1 日以来的毫秒数 (link)。

【讨论】:

    【解决方案3】:

    试试这段代码:

    const date = new Date();
    futureDate = new Date(date.setDate(date.getDate() + 30)).toLocaleDateString();
    

    【讨论】:

      【解决方案4】:

      我编写了一个日期包装库,可以帮助解析、操作和格式化日期。

      https://github.com/timrwood/moment

      以下是使用 Moment.js 的方法

      var inThirtyDays = moment().add('days', 30);
      

      【讨论】:

      【解决方案5】:
      var now = new Date();
      var THIRTY_DAYS = 30 * 24 * 60 * 60 * 1000;
      var thirtyDaysFromNow = now + THIRTY_DAYS;
      

      【讨论】:

      • 对我不起作用; thirtyDaysFromNow.toString() 产生“无效日期”。 new Date(now + <any number>) 要么产生“无效日期”,要么产生与 now 相同的值。我不认为这和你想的一样。
      • 这会起作用,但请改用var now = new Date().getTime();
      • 不错的@meagar 和@John Strickler; new Date 是错误的。
      【解决方案6】:

      我已经能够完成这项工作:

      function() {
      // Get local time as ISO string with offset at the end
      var now = new Date();
      now.setMonth(now.getMonth() + 1);
      var pad = function(num) {
          var norm = Math.abs(Math.floor(num));
          return (norm < 10 ? '0' : '') + norm;
      };
      return now.getFullYear() 
          + '-' + pad(now.getMonth()+1)
          + '-' + pad(now.getDate());
      }
      

      【讨论】:

      • 这似乎无法处理当前月份不是正好 30 天的情况。例如,当今天是 2020 年 2 月 1 日时,这会给出什么信息?
      【解决方案7】:
      const today = new Date();    
      const thirty_days_from_now = new Date(today.getTime() + 30 * 24 * 60 * 60 * 1000),
      

      【讨论】:

        【解决方案8】:
        const afterMonth = new Date(new Date().setDate(new Date().getDate()+30)).toISOString()
        
        const Now = new Date().toISOString()

        【讨论】:

        • 这里为什么需要const Now
        猜你喜欢
        • 2018-08-25
        • 1970-01-01
        • 2018-10-12
        • 1970-01-01
        • 2018-09-12
        • 2019-12-29
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        相关资源
        最近更新 更多