在日期选择器中更改日期
本文关键字:日期 选择器 | 更新日期: 2023-09-27 17:50:33
从date_delivery中选取日期后,保修端将根据所设置的日期或添加的年份自动生成日期。
这是我的观点:
<th class="editor-label-dtp">
@Html.LabelFor(model => model.sw_delivery_date,"Delivery Date : ")
</th>
<td class="editor-field">
<input type="text" id="date_delivered" name="sw_delivery_date" onchange="switchWarranty(this.value)">
@Html.ValidationMessageFor(model => model.sw_delivery_date)
</td>
<th class="editor-label-dtp">
@Html.LabelFor(model => model.sw_warranty_end,"Warranty End : ")
</th>
<td class="editor-field">
@Html.TextBox("warranty_end")
@Html.ValidationMessageFor(model => model.sw_warranty_end)
</td>
javascript代码:
function switchWarranty(value) {
var setDate = new Date(value);
var setMonth = setDate.getMonth();
var totalMonth = setMonth + 36;
var computeYear = setDate.getYear() + parseInt(totalMonth / 12);
var computeMonth = totalMonth % 12;
var formatDate = computeMonth + 1 + '/' + (setDate.getDate() + 1) + '/' + computeYear;
document.getElementById("warranty_end").value = formatDate;
$('#warranty_end').datepicker({
defaultDate: formatDate
});
}
当我尝试在IE 11浏览器中运行此代码时,在waranty_end字段中生成的日期不像我所期望的那样。这一年变成了118。例如,如果为delivery_date选择05/25/2015的日期,则生成的保修结束日期为5/26/118。我预计产量为2018年5月25日。请把这个给我。非常感谢。
使用getFullYear()而不是getYear(),那么您将得到2018而不是118。试试这个
var setDate = new Date("05/25/2015");
var setMonth = setDate.getMonth();
var totalMonth = setMonth + 36;
var computeYear = setDate.getFullYear() + parseInt(totalMonth / 12);
var computeMonth = totalMonth % 12;
var day = (setDate.getDate() + 1).toString();
var month = (computeMonth + 1).toString();
month = month.length > 1 ? month : '0' + month;
day = day.length > 1 ? day : '0' + day;
var formatDate = month + '/' + day + '/' + computeYear;
如果您有一个m/d/y格式的字符串,并希望将其转换为3年后的日期,那么您应该首先将字符串解析为日期,然后添加3年(或36个月,如果您喜欢):
function parseMDY(s) {
var b = s.split(/'D/);
return new Date(b[2], b[0]-1, b[1]);
}
和switchWarranty变成:
function switchWarranty(value) {
// Helper to add leading zero
function z(n){return (n<10? '0':'') + n;}
// Convert value to Date
var date = parseMDY(value);
// Add 36 months
date.setMonth(date.getMonth() + 36);
// Create a formatted string
var formatDate = z(date.getMonth() + 1) + '/' +
z(date.getDate()) + '/' +
date.getFullYear();
// Assume this bit works
document.getElementById("warranty_end").value = formatDate;
$('#warranty_end').datepicker({defaultDate: formatDate});
}
在上面,2016年2月29日加3年等于2019年3月1日。
注意,永远不要将字符串传递给Date构造函数。内置的字符串解析非常不可靠,例如
new Date('05/25/2015'))
Safari中的返回Invalid Date。