我有一个表单,其中包含选择值 TIME FROM: 和 TIME TO:。
它们的格式为 TIME FROM:,选择时间,然后选择 am 或 pm
选择 TIME TO: 的格式为 ,选择时间小时,然后选择 am 或 pm
如何获取所选值之间的持续时间并填充持续时间输入字段
示例
1) 下午 1:00 - 下午 5:00 = 4 小时持续时间/输入的持续时间填充 4 小时
2) 上午 9:00 - 下午 3:30 = 6.5 小时持续时间/填充 6.5 小时的持续时间输入
<div class="row">
<div class="col-lg-2"></div>
<div class="col-lg-10">
<div class="col-md-6">
<div class="row">
<label class="control-label col-lg-2 text-semibold">From:</label>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_from" name="time_from" class="form-control">
<option value="1">1:00</option>
<option value="130">1:30</option>
<option value="2">2:00</option>
<option value="230">2:30</option>
<option value="3">3:00</option>
<option value="330">3:30</option>
<option value="4">4:00</option>
<option value="430">4:30</option>
<option value="5">5:00</option>
<option value="530">5:30</option>
<option value="6">6:00</option>
<option value="630">6:30</option>
<option value="7">7:00</option>
<option value="730">7:30</option>
<option value="8">8:00</option>
<option value="830">8:30</option>
<option value="9">9:00</option>
<option value="930">9:30</option>
<option value="10">10:00</option>
<option value="1030">10:30</option>
<option value="11">11:00</option>
<option value="1130">11:30</option>
<option value="12">12:00</option>
<option value="1230">12:30</option>
</select>
</div>
</div>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_from_am_pm" name="time_from_am_pm" class="form-control">
<option value="pm">pm</option>
<option value="am">am</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row">
<label class="control-label col-lg-2 pl-20 text-semibold">To:</label>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_to" name="time_to" class="form-control">
<option value="1">1:00</option>
<option value="130">1:30</option>
<option value="2">2:00</option>
<option value="230">2:30</option>
<option value="3">3:00</option>
<option value="330">3:30</option>
<option value="4">4:00</option>
<option value="430">4:30</option>
<option value="5">5:00</option>
<option value="530">5:30</option>
<option value="6">6:00</option>
<option value="630">6:30</option>
<option value="7">7:00</option>
<option value="730">7:30</option>
<option value="8">8:00</option>
<option value="830">8:30</option>
<option value="9">9:00</option>
<option value="930">9:30</option>
<option value="10">10:00</option>
<option value="1030">10:30</option>
<option value="11">11:00</option>
<option value="1130">11:30</option>
<option value="12">12:00</option>
<option value="1230">12:30</option>
</select>
</div>
</div>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_to_am_pm" name="time_to_am_pm" class="form-control">
<option value="pm">pm</option>
<option value="am">am</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2 text-semibold">Duration:</label>
<div class="col-lg-10">
<input type="text" name="booking_duration" class="form-control">
</div>
</div>
最佳答案
使用 momentjs,您可以为四个字段编写更改事件处理程序:
$('#time_from, #time_from_am_pm, #time_to, #time_to_am_pm').on('change', function(e) {
var timeFrom = moment($('#time_from option:selected').text() +
$('#time_from_am_pm option:selected').text(), 'HH:mma');
var timeTo = moment($('#time_to option:selected').text() +
$('#time_to_am_pm option:selected').text(), 'HH:mma');
var dif = timeTo.diff(timeFrom);
if (dif < 0) {
timeTo = timeTo.add(1, 'days');
dif = timeTo.diff(timeFrom);
}
var d = moment.duration(dif);
var result = +d.get('hours') + (+d.get('minutes') / 60);
$('[name="booking_duration"]').val(result);
});
代码片段:
$('#time_from, #time_from_am_pm, #time_to, #time_to_am_pm').on('change', function(e) {
var timeFrom = moment($('#time_from option:selected').text() + $('#time_from_am_pm option:selected').text(), 'HH:mma');
var timeTo = moment($('#time_to option:selected').text() + $('#time_to_am_pm option:selected').text(), 'HH:mma');
var dif = timeTo.diff(timeFrom);
if (dif < 0) {
timeTo = timeTo.add(1, 'days');
dif = timeTo.diff(timeFrom);
}
var d = moment.duration(dif);
var result = +d.get('hours') + (+d.get('minutes') / 60);
$('[name="booking_duration"]').val(result);
});
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<div class="row">
<div class="col-lg-2"></div>
<div class="col-lg-10">
<div class="col-md-6">
<div class="row">
<label class="control-label col-lg-2 text-semibold">From:</label>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_from" name="time_from" class="form-control">
<option value="1">1:00</option>
<option value="130">1:30</option>
<option value="2">2:00</option>
<option value="230">2:30</option>
<option value="3">3:00</option>
<option value="330">3:30</option>
<option value="4">4:00</option>
<option value="430">4:30</option>
<option value="5">5:00</option>
<option value="530">5:30</option>
<option value="6">6:00</option>
<option value="630">6:30</option>
<option value="7">7:00</option>
<option value="730">7:30</option>
<option value="8">8:00</option>
<option value="830">8:30</option>
<option value="9">9:00</option>
<option value="930">9:30</option>
<option value="10">10:00</option>
<option value="1030">10:30</option>
<option value="11">11:00</option>
<option value="1130">11:30</option>
<option value="12">12:00</option>
<option value="1230">12:30</option>
</select>
</div>
</div>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_from_am_pm" name="time_from_am_pm" class="form-control">
<option value="pm">pm</option>
<option value="am">am</option>
</select>
</div>
</div>
</div>
</div>
<div class="col-md-6">
<div class="row">
<label class="control-label col-lg-2 pl-20 text-semibold">To:</label>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_to" name="time_to" class="form-control">
<option value="1">1:00</option>
<option value="130">1:30</option>
<option value="2">2:00</option>
<option value="230">2:30</option>
<option value="3">3:00</option>
<option value="330">3:30</option>
<option value="4">4:00</option>
<option value="430">4:30</option>
<option value="5">5:00</option>
<option value="530">5:30</option>
<option value="6">6:00</option>
<option value="630">6:30</option>
<option value="7">7:00</option>
<option value="730">7:30</option>
<option value="8">8:00</option>
<option value="830">8:30</option>
<option value="9">9:00</option>
<option value="930">9:30</option>
<option value="10">10:00</option>
<option value="1030">10:30</option>
<option value="11">11:00</option>
<option value="1130">11:30</option>
<option value="12">12:00</option>
<option value="1230">12:30</option>
</select>
</div>
</div>
<div class="col-lg-5 pr-20">
<div class="form-group">
<select id="time_to_am_pm" name="time_to_am_pm" class="form-control">
<option value="pm">pm</option>
<option value="am">am</option>
</select>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-2 text-semibold">Duration:</label>
<div class="col-lg-10">
<input type="text" name="booking_duration" class="form-control">
</div>
</div>
关于javascript - 从表单中的 2 个选择时间选项计算持续时间值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316771/