在 Java 脚本中向日期添加可变数字

Add a variable number to a date in Java script

我已经阅读了几篇文章,但似乎没有什么要点。我创建了一个表格来记录预订日期(当用户想要预订游戏时)和他们希望借用它的天数。我想将此添加到预订日期以获得必须 return 编辑游戏的日期。到目前为止,我已将我的代码封装到一个函数中,以便我可以使用 onclick 方法调用它。这段代码应该是什么样子才能正常工作?差点忘了 - 为了让生活变得艰难,我的日期是这样写的 YYYY-MM-DD

    function ReturnDate(){
    var reservation_begin = document.getElementById('reservation_start').value;
    var loan_period = document.getElementById('requested_days').value;
    var reservation_end = document.getElementById('return_date');
    var dateResult = reservation_begin + loan_period;
    return_date.value = dateResult;
}

使用 Linus 提出的建议 我进行了以下更改,但在 return 日期的格式设置方面遇到了问题。例如,将预订日期设置为 2015-01-03 得到了 return 日期

2015-0-32 的结果
function ReturnDate(){
    var reservation_begin = document.getElementById('reservation_start').value;
    var loan_period = document.getElementById('requested_days').value;
    var resDate = new Date(reservation_begin);
    alert(resDate)
    var period = loan_period;
    var output = document.getElementById('return_date');

    resDate.setDate(resDate.getDate() + period);
    alert(period)
    //return_date.value = resDate.getFullYear() + "-" + (resDate.getMonth() + 1) + "-" + resDate.getDate();
    return_date.value = resDate.getFullYear() + "-" + resDate.getMonth() + "-" + (resDate.getDate() +1);
}

如前所述,使用 js 处理日期可能有点棘手。 但是,如果只是将日期添加天数,这可能是一个解决方案吗?

JSBIN: http://jsbin.com/lebonababi/1/edit?js,output

JS:

var resDate = new Date('2015-02-01');
var period = 6;
var output = "";

resDate.setDate(resDate.getDate() + period);
output = resDate.getFullYear() + "-" + (resDate.getMonth() + 1) + "-" + resDate.getDate();

alert(output);

编辑:

添加了一个新的JSBin,与原来的代码更加一致。

JSBin: http://jsbin.com/guguzoxuyi/1/edit?js,output

HTML:

  <input id="reservationStart" type="text" value="2015-03-01" />
  <br />
  <input id="requestedDays" type="text" value="14" /> 
  <br />
  <a id="calculateDate" href="javascript:;">Calculate Date</a>

  <br /><br /><br />  

  Output:
  <input id="calculatedDate" type="text" />

JS:

// Click event
document.getElementById('calculateDate').addEventListener('click', returnDate);

// Click function
function returnDate(){

  var reservationStart = document.getElementById('reservationStart').value,
      requestedDays = parseInt(document.getElementById('requestedDays').value),
      targetDate = new Date(reservationStart),
      formattedDate = "";


  // Calculate date
  targetDate.setDate(targetDate.getDate() + requestedDays);

  // Format date
  formattedDate = formatDate(targetDate);

  // Output date
  document.getElementById('calculatedDate').value = formattedDate;

}

// Format date (XXXX-XX-XX)
function formatDate(fullDate) {

  var dateYear = fullDate.getFullYear(),
      dateMonth = fullDate.getMonth()+1,
      dateDays = fullDate.getDate();

  // Pad month and days
  dateMonth = pad(dateMonth);
  dateDays = pad(dateDays);  

  return dateYear + "-" + dateMonth + "-" + dateDays;

}

// Pad number
function pad(num) {

  return (num < 10 ? '0' : '') + num;

}

使用今天日期的示例:

var today = new Date();
today.setDate(today.getDate() + x);

其中 x 是天数。然后只需使用 getYear()、getMonth() 和 getDate() 并按照您喜欢的方式设置格式。

编辑

var myDate = new Date(year, month, day, hours, minutes, seconds, milliseconds);

假设您的日期是以 dd/mm/yyyy 格式输入的,那么

dateParts = inputDate.split("/");
var myDate = new Date(dateParts[2], dateParts[1]-1, dateParts[0]);

根据日期格式,您的 split() 分隔符和数组位置可能会有所不同,但这是一般的想法。

根据我的评论,

Split reservation_begin and use the Date constructor feeding in the parts to create a Javascript date object. getTime will give you the milliseconds since the Epoch. There are 86400000 milliseconds in a day, so multiply this by loan_period. Add the two millisecond result together and use the Date constructor with your total milliseconds to get dateResult as a Javascript date object.

使用 Date.UTC 但您不必这样做。

function pad(num) {
    return num < 10 ? '0' + num : num;
}

var reservation_begin = ('2015-02-01').split('-'),
    loan_period = '5',
    begin,
    end;

reservation_begin[1] -= 1;
begin = new Date(Date.UTC.apply(null, reservation_begin)).getTime();
end = new Date(begin + 86400000 * loan_period);
document.body.textContent = [
    end.getUTCFullYear(),
    pad(end.getUTCMonth() + 1),
    pad(end.getUTCDate())
].join('-');

为什么要将日期字符串分成几部分?这是为了避免跨浏览器解析问题。

为什么要用毫秒?这是 Javascript 日期表示的最小值,使用它可以避免浏览器中可能出现的任何翻转问题。

为什么要使用 UTC?您还没有指定脚本的要求,这已经很复杂了。您不必使用它,只需将部分输入 Date 并使用非 UTC get 方法即可。

pad 是做什么的?它将月份值格式化为 MM,将日期值格式化为 DD。

请注意,月份在 Javascript 中引用为零,因此月份由数字 0-11 表示。

与第三个变量 "reservation_end" 有点混淆,但根据您的问题,此解决方案可能有效。 var dateResult = new Date(reservation_begin); dateResult.setDate(dateResult.getDate() + parseInt(loan_period)); alert(dateResult);

http://jsfiddle.net/uwfpbzt2/