在 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);
我已经阅读了几篇文章,但似乎没有什么要点。我创建了一个表格来记录预订日期(当用户想要预订游戏时)和他们希望借用它的天数。我想将此添加到预订日期以获得必须 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 byloan_period
. Add the two millisecond result together and use the Date constructor with your total milliseconds to getdateResult
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);