在日期选择器中更改日期

本文关键字:日期 选择器 | 更新日期: 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