Javascript为未来日期添加时间

Wil*_*Sam 10 javascript date

我查看了其他一些问题,并没有看到我的具体问题,所以请原谅我是否被询问或回答.

我想要做的是找出一个简单的"付款"计算器,并提供一些额外的信息,如第一个付款日期和最后一个.

在某些情况下,最后一次付款的日期有效,有时却没有.

这是我的代码:

var myDate = new Date();

var odo = document.contract.firstPaymentDate.value;
var n = odo.split("/"); 
var month = n[0];
var day = n[1];
var year = n[2];

var oldDateObj = new Date(year, month, day);
var newDateObj = new Date(oldDateObj.getTime() + ((document.contract.totalNumberRegularPayments.value - 1)*1209600*1000));
var dd = newDateObj.getDate();
var mm = newDateObj.getMonth();
var y = newDateObj.getFullYear();

var someFormattedDate = mm + '/'+ dd + '/'+ y;
document.contract.lastPaymentDate.value = someFormattedDate;
Run Code Online (Sandbox Code Playgroud)

所以我采取第一个付款日期,并添加1209600秒的付款次数(减1,因为他们"已经"支付了第一个).

这基于可以由用户选择的特定日期开始.

所以我的例子是156 BiWeekly付款(因此计算为155),这可以达到6年.如果我选择1日的日期,我将以2013年10月1日作为开始,但是作为结束的9/11/2019(周二的第一个,周三的最后一个).

第15届(2013年9月15日 - 周日 - 至2009年8月24日 - 周六)20日(2013年9月20日 - 周五至2013年8月29日 - 周四)

所以,因为有时它是一天之后,有时候提前一天,我不能只是+1 var dd = newDateObj.getDate();

对于发生的事情,我真的很困惑,我希望有人能够对此有一些经验,或者有人知道我可能做错了什么.

提前感谢您提供的任何帮助.

Rob*_*obG 11

如果您想要添加几周,只需添加7倍的天数,例如

var now = new Date();
// Add two weeks
now.setDate(now.getDate() + 14);
Run Code Online (Sandbox Code Playgroud)

因此,如果您每24周付款一次:

var now = new Date();
// Add 24 fortnights (48 weeks)
now.setDate(now.getDate() + 24 * 14);
Run Code Online (Sandbox Code Playgroud)

要么

now.setDate(now.getDate() + 24 * 2 * 7);
Run Code Online (Sandbox Code Playgroud)

无论你认为什么都是最清楚的.

如果您想要一个开始和结束日期:

var start = new Date();
var end = new Date(+start);
end.setDate(end.getDate() + 24 * 14);

alert('Start on: ' + start + '.\nEnd in 24 fortnights: ' + end); 
Run Code Online (Sandbox Code Playgroud)

编辑

这是一个有效的例子:

<script>

function calcLastPayment(start, numPayments) {
  if (typeof start == 'string') {
    start = stringToDate(start);
  }

  var end = new Date(+start);
  end.setDate(end.getDate() + --numPayments * 14)
  return end;
}

// Expect date in US format m/d/y
function stringToDate(s) {
  s = s.split(/\D/)
  return new Date(s[2], --s[0], s[1])
}

</script>

<form>
 <table>
  <tr><td>Enter first payment date (m/d/y):
      <td><input name="start">
  <tr><td>Enter number of payments:
      <td><input name="numPayments">
  <tr><td colspan="2"><input type="button" value="Calc end date" onclick="
           this.form.end.value = calcLastPayment(this.form.start.value, this.form.numPayments.value)
           ">
  <tr><td>Last payment date:
      <td><input readonly name="end">
  <tr><td colspan="2"><input type="reset">
 </table>
</form>
Run Code Online (Sandbox Code Playgroud)

鉴于第一个付款日期为9月5日星期四和3月还款,它将于10月3日星期四返回,这对我来说是正确的(9月5日和19日以及10月3日).它适用于任何数量的付款.