【问题标题】:Javascript Date Plus 2 Weeks (14 days)Javascript 日期加 2 周(14 天)
【发布时间】:2011-10-13 09:19:36
【问题描述】:

我用它来获取日期:

var currentTime = new Date()
var month = currentTime.getMonth() + 1
var day = currentTime.getDate()
var year = currentTime.getFullYear()
alert(month + "/" + day + "/" + year);

如何增加 2 周?所以不是显示 10/13/2011,而是显示 10/27/2011 等

这里是小提琴:http://jsfiddle.net/25wNa/

我希望一个输入有 +14 天,另一个有 +21

注意:我希望格式为 > 10/13/2011 <.>

【问题讨论】:

标签: javascript date


【解决方案1】:

12096e5magic number,它是 14 天(以毫秒为单位)。

var fortnightAway = new Date(Date.now() + 12096e5);

jsFiddle.

【讨论】:

  • @jQuerybeast:它不适合我。
  • 啊我的错。我希望它在我的格式上,这就是我问这个问题的原因。你能检查我的小提琴和编辑吗?谢谢
  • @jQuerybeast 只需使用您现有的代码,但将currentTime 替换为fortnightAway
  • @jQuerybeast: 1000 * 60 * 60 * 24 * 14, 一秒内的毫秒 * 一分钟内的秒数 * 一小时内的分钟数 * 一天内的小时数 * 两周内的天数
  • 您有没有注意到,如果添加超过 14 天,月份不会改变?
【解决方案2】:
var currentTime = new Date();
currentTime.setDate(currentTime.getDate()+14);

【讨论】:

  • 你能检查我的编辑吗?我喜欢 DD/MM/YY 的格式。这就是为什么我问我的问题,因为如果我添加这种格式,它会绕过一个月的最长天数。我得到的值为 2011 年 10 月 34 日。谢谢
  • 只需在函数中定义单独的日、月和年变量之前输入currentTime.setDate(currentTime.getDate()+14);。它应该可以工作。
  • 如果加上 14 天会让您进入下个月,这是否有效?
【解决方案3】:

为你做了一把小提琴http://jsfiddle.net/pramodpv/wfwuZ/

    Date.prototype.AddDays = function(noOfDays) {
       this.setTime(this.getTime() + (noOfDays * (1000 * 60 * 60 * 24)));
       return this;
    }

    Date.prototype.toString = function() {
       return this.getMonth() + "/" + this.getDate() + "/" +  this.getFullYear().toString().slice(2); 
    }

    $(function() {
        var currentTime = new Date();
        alert(currentTime.AddDays(14));
    });

【讨论】:

  • 你能检查我的编辑吗?我喜欢 DD/MM/YY 的格式。这就是为什么我问我的问题,因为如果我添加这种格式,它会绕过一个月的最长天数。我得到的值为 2011 年 10 月 34 日。谢谢
  • 如果您始终使用 DD/MM/YY,则可以覆盖日期 toString 函数。我已经根据您的日期格式编辑了我的答案和小提琴。 js小提琴链接是jsfiddle.net/pramodpv/wfwuZ/2
  • 我喜欢 AddDays 函数,但是如果你愿意,它不处理 dst 开关:所以,我让它更像这样: function addDays(noOfDays, date) { var origTimezoneOffset = date.getTimezoneOffset( ); date = new Date(date.getTime() + (noOfDays * (1000 * 60 * 60 * 24))); var offsetDiff = (date.getTimezoneOffset() - origTimezoneOffset) * 60 * 1000; date = new Date(date.getTime() + offsetDiff);归期; }
  • 覆盖Date.prototype.toString() 可能是个坏主意
【解决方案4】:

试试这个:

currentTime.setDate(currentTime.getDate()+14);

【讨论】:

    【解决方案5】:

    12096e5一种神奇的数字。 milliseconds in exponential notation 仅 14 天。

    这个数字是 1000[ms] * 60[s] * 60[m] * 24[h] * 14[d] 以指数形式保存的结果。

    如果你输入Number('12096e5'),你可以检查它。您将得到 1209600000 [ms],这正好是 2 周(以毫秒为单位)。指数符号使它变得晦涩难懂。

    您可以用指数表示法编写任何其他数字,以使您的开发人员的生活更加有趣

    Date object 具有接受毫秒作为参数的构造函数,该参数可以是指数表示法。

    var d = new Date(毫秒);

    var afterTwoWeeks = new Date(+new Date + 12096e5);
    var afterTwoWeeks = new Date(+new Date + 1209600000);
    

    两者都是一样的。

    【讨论】:

    • 幻数 Wikipedia
    • 请注意,指数符号不是 Wikipedia 引用幻数的真实示例,也不是协议中的示例,因为它是 Ognyan 指出的以指数符号定义的数字跨度>
    • @alex 我同意在很大程度上这是一个神奇的数字/字符串。这是神奇的“文字”,但由于混淆来自我写的符号类型,它不是不正确的魔法文字。
    【解决方案6】:

    嗯,JS 时间是以毫秒为单位的,因此添加两周就是计算两周以毫秒为单位的情况,然后添加该值。

    var twoWeeks = 1000 * 60 * 60 * 24 * 14;
    var twoWeeksTime = new Date(new Date().getTime() + twoWeeks);
    var formattedDate = twoWeeksTime.getDate() + '/' + (twoWeeksTime.getMonth()+1) + '/' + twoWeeksTime.getYear();
    

    当然,如果您需要添加月份,则此方法会失效,因为它们的长度是可变的,但添加天和周就可以了。

    或者,您可以使用DateJS library,它具有完全适合这种事情的功能(加上加载更多)。

    使用 DateJS,您的代码可能如下所示:

    var twoWeeksTime = Date.today().add({ days: 14 });
    var formattedDate = twoWeeks.TimetoString('dd/MM/yy');
    

    希望对您有所帮助。

    【讨论】:

    • 我认为var twoWeeks = 1000* 60 * 60 * 24 * 14;
    • 你能检查我的编辑吗?我喜欢 DD/MM/YY 的格式。这就是为什么我问我的问题,因为如果我添加这种格式,它会绕过一个月的最长天数。我得到的值为 2011 年 10 月 34 日。谢谢
    • @jQuerybeast - 使用你的问题中的技术和我的回答中的twoWeeksTime 变量会给你一个有效的日期。你试过了吗?但无论如何,我已经在我的答案中添加了一行格式化代码,以及一些代码来演示 DateJS 如何让事情变得更容易。
    • @jQuerybeast - 很公平;我给了你一段同样好的代码,不使用插件。
    • @jQuerybeast - 具有讽刺意味的是,您的 JSFiddle 出现错误 404。但是,是的,我已经对其进行了测试......你是对的,我忘记将 +1 添加到月份,但是由于您已经在问题的代码中包含了这一点,所以我想您足够聪明,可以找出我出错的地方。 (我现在添加了+1
    【解决方案7】:

    添加以下原型方法

    Date.prototype.addDays = function(days) {
         this.setDate(this.getDate()+days);
    }
    

    而且使用起来非常简单,

    currentTime.addDays(5);
    

    【讨论】:

      【解决方案8】:

      从当前日期起加或减 2 周

      以下代码示例以 YYYY-MM-DD 格式输出

      如果在字符串中添加条件,将 0 与小于 10 的月份和日期连接起来。

      var twoWeeks = 1000 * 60 * 60 * 24 * 14;
      var twoWeeksTime = new Date(new Date().getTime() + twoWeeks); /* Add or Subtract here*/
      
      var formattedDate = (twoWeeksTime.getFullYear()) + '-' +
                          ((twoWeeksTime.getMonth()+1) < 10 ? "0"+(twoWeeksTime.getMonth()+1): (twoWeeksTime.getMonth()+1)) + '-' +
                          (twoWeeksTime.getDate() < 10 ? "0"+(twoWeeksTime.getDate()): (twoWeeksTime.getDate()));
      
      document.body.innerHTML = formattedDate;
      

      【讨论】:

        【解决方案9】:

        如果您正在以特定格式格式化 javascript 日期,那么我认为您可以查看此脚本 http://blog.stevenlevithan.com/archives/date-time-format。包含脚本后你需要做的就是这个new Date(+new Date + 1000* 60 * 60 * 24 * 14).format('dd/mm/yyyy'),你会得到输出"27/10/2011"

        脚本非常小,缩小后仅 1KB 以上。这是一个工作小提琴的链接http://jsfiddle.net/naryad/GufvT/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-07-27
          • 1970-01-01
          • 2012-02-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多