我已经阅读了一些文章,但似乎没有任何意义。我创建了一个表单,记录预订日期(当用户想要预订游戏时)以及他们希望借用它的天数。我想将此添加到预订日期以获取必须返回游戏的日期。到目前为止,我已将代码整理到一个函数中,以便我可以使用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);
}
答案 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,但您不必这样做。
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;
为什么要将日期字符串拆分成部分?这是为了避免跨浏览器解析问题。
为什么要用毫秒?这是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);