0

我有 2 个下拉列表,StartTime 和 EndTime,我以 30 分钟的间隔填充时间,并且当用户选择新的 StartTime 时,我试图将 EndTime 设置为比 StartTime 晚一个小时

我的模型:

model.Times = new[]
{
new SelectListItem{ Text="12:00 AM", Value = "12:00 AM" },
new SelectListItem{ Text="12:30 AM", Value = "12:30 AM" },
new SelectListItem{ Text="1:00 AM", Value = "1:00 AM" },
etc
}

我的cshtml:

@Html.DropDownListFor(x => x.StartTime, Model.Times, new {  @id = "ddlStartTime"})
@Html.DropDownListFor(x => x.EndTime, Model.Times, new {  @id = "ddlEndTime"})

我可以将 EndTime 下拉列表设置为等于 StartTime 下拉列表,如下所示:

$("#ddlStartTime").change(function () {                
    var selectedValue = $(this).val();
    $('#EndTime').val(newDateObj);
});

但是如何将 EndTime 设置为一个小时后?(还处理开始时间为晚上 11:00 和晚上 11:30 的情况)

谢谢你的帮助

4

2 回答 2

1

使用此 JQuery 添加小时请参阅参考

$('#startTime').keyup(function(){
if(/[0-9]{2}\:[0-9]{2}/.test($(this).val())){
    var startTime = $(this).val().split(':');
    var endHours = parseInt(startTime[0]) +1;
    endHours = Math.min(Math.max(endHours, 1), 24);
    $('#endTime').val(endHours +':'+ startTime[1]);
  }
});
于 2013-06-26T05:35:37.200 回答
0

这可能不是最干净的代码,但它就在这里。您可以使用 javascriptDate来帮助您转换 24 小时左右的时间。

var selectedValue = "1:00 AM";
var hours, minutes, endDate, endDateString, ampm;

hours = selectedValue.split(':')[1].substring(3, 5) == "AM" ? parseInt(selectedValue.substring(0, 2)) : parseInt(selectedValue.substring(0, 2)) + 12;
minutes = parseInt(selectedValue.split(':')[1].substring(0, 2));
endDate = new Date(0, 0, 0, hours + 1, minutes, 0, 0);

if (endDate.getHours() >= 12) {
    ampm = "PM";
    hours = endDate.getHours() - 12;
}
else {
    ampm = "AM";
    hours = endDate.getHours();
}
if (hours === 0) {
    endDateString = 12;
}
else {
    endDateString = hours < 10 ? '0' + hours.toString() : hours.toString();
}
endDateString += endDate.getMinutes() < 10 ? ':0' + endDate.getMinutes() + ' ' + ampm : ':' + endDate.getMinutes() + ' ' + ampm;

代码有点粗糙.split,但是您应该大致了解如何执行此操作并对代码进行自己的微调。

您可以在此处找到用于测试目的的小提琴。

于 2013-06-26T06:12:59.750 回答