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

时间:2014-04-16 16:47:35

标签: javascript

我希望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天?

4 个答案:

答案 0 :(得分:5)

有些令人惊讶的是,

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

{8}为d1,8月15日为d2

另一种选择是:

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>

答案 1 :(得分:1)

你为d2制作了一个新的日期(今天),但只改变了一天,这应该有效:

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

答案 2 :(得分:1)

只在日期()函数中添加 getTime()函数,

检查此 Demo 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

答案 3 :(得分:1)

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

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