在Javascript中为日期添加变量编号

时间:2015-01-30 10:11:28

标签: javascript function date

我已经阅读了一些文章,但似乎没有任何意义。我创建了一个表单,记录预订日期(当用户想要预订游戏时)以及他们希望借用它的天数。我想将此添加到预订日期以获取必须返回游戏的日期。到目前为止,我已将代码整理到一个函数中,以便我可以使用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提出的建议 我进行了以下更改,但在返回日期的格式设置方面遇到了问题。例如,将预订日期设置为2015-01-03给出了返回日期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);
}

4 个答案:

答案 0 :(得分:2)

如上所述,用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;

}

答案 1 :(得分:1)

使用今天日期的示例:

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格式输入为inputDate,然后

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

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

答案 2 :(得分:1)

根据我的评论,

  

Split reservation_begin并使用Date构造函数输入   部件来创建一个Javascript日期对象。 getTime会给你   自纪元以来的毫秒数。一天有86400000毫秒,所以   乘以loan_period。一起添加两毫秒的结果   并使用Date构造函数和你的总毫秒数来获取   dateResult作为Javascript日期对象。

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

&#13;
&#13;
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('-');
&#13;
&#13;
&#13;

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

为什么要用毫秒?这是Javascript Date表示的最小值,使用此值可以避免浏览器中可能存在的任何翻转问题。

为什么要使用UTC?您还没有为脚本指定要求,这很复杂。您不必使用它,您只需将部分输入日期并使用非UTC获取方法。

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

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

答案 3 :(得分:1)

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

http://jsfiddle.net/uwfpbzt2/