繁体   English   中英

setDate 与 getDate + n 返回今天的日期 + n

[英]setDate with getDate + n returns today's date + n

我希望 d2 是 d1 + 14 天,而不是今天的日期 + 14 天。

<script type="text/javascript">
  var d1 = new Date(2014, 7, 1);
  var d2 = new Date();
  d2.setDate(d1.getDate() + 14);

  // d1 = Fri Aug 01 2014 00:00:00 GMT+0100 (GMT Daylight Time)
  document.write("d1 = " + d1);
  document.write("<br></br>")

  // today's date is 16-04-2014
  // d2 = Tue Apr 15 2014 17:36:03 GMT+0100 (GMT Daylight Time)
  document.write("d2 = " + d2);
</script>

我怎样才能使 d2 = d1 + 14 天?

setDate有点令人惊讶,它设置了现有实例的月份日期。 由于您已经用今天初始化了d2 ,因此您只是更改了该日期的月份日期,而不是d1任何其他方面。

你可能想要:

var d1 = new Date(2014, 7, 1);  // A specific date
var d2 = new Date(d1);          // Clone that date
d2.setDate(d1.getDate() + 14);  // Move forward 14 days

这给了我们d1 8 月 1 日和d2 8 月 15 日。

另一种选择是:

var d1 = new Date(2014, 7, 1);
var d2 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate() + 14);

顺便说一句,即使你已经过了月底,这两种方法也能奏效。

第二个选项的完整示例: Live Copy

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Date plus 14 days</title>
  <style>
    body {
      font-family: sans-serif;
    }
  </style>
</head>
<body>
  <script>
    (function() {
      var d1, d2;

      display("Starting with August 1st:")
      d1 = new Date(2014, 7, 1);
      d2 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate() + 14);
      display("d1 = " + d1);
      display("d1 = " + d2);
      document.body.appendChild(document.createElement('hr'));

      display("Starting with August 20th:")
      d1 = new Date(2014, 7, 20);
      d2 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate() + 14);
      display("d1 = " + d1);
      display("d1 = " + d2);

      function display(msg) {
        var p = document.createElement('p');
        p.innerHTML = String(msg);
        document.body.appendChild(p);
      }
    })();
  </script>
</body>
</html>

您正在为 d2 创建一个新日期(今天),但只更改日期,这应该有效:

var d1 = new Date(2014, 7, 1);
var d2 = new Date(2014, 7, d1.getDate()+14);

只将getTime()函数放在 d2 Date()函数中,

检查这个演示jsFiddle

JavaScript

  var d1 = new Date(2014, 7, 1);
  var d2 = new Date(d1.getTime());
  d2.setDate(d1.getDate() + 14);

  // d1 = Fri Aug 01 2014 00:00:00 GMT+0100 (GMT Daylight Time)
  document.write("d1 = " + d1);
  document.write("<br></br>")

  // today's date is 16-04-2014
  // d2 = Tue Apr 15 2014 17:36:03 GMT+0100 (GMT Daylight Time)
  document.write("d2 = " + d2);

结果

d1 = Fri Aug 1 00:00:00 UTC+0530 2014

d2 = Fri Aug 15 00:00:00 UTC+0530 2014

d1 是八月的日期,d2 是今天。 您将 d2 设置为今天 + 14 天。 正确的结果如下:

var d1 = new Date(2014, 7, 1);
var d2 = new Date(d1.setDate(d1.getDate() + 12));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM