javascript - 如何使用javascript自动计算2个日期和2个时间的持续时间?
问题描述
我正在尝试以小时为单位计算 2 个日期和 2 次之间的时差。用户将能够选择从日期、到日期、从时间和到时间。我现在面临的问题是当我选择了两个日期和时间时,持续时间显示 NaN。我已经尝试通过为 和持续时间分配一个日期来var timeStart = new Date("01/01/2007 "+ start); var timeEnd = new Date("01/01/2007 " + end);
计算并显示在持续时间中,但这不是我想要的。我希望实施的系统是让用户选择时间和日期,系统将以小时为单位显示持续时间。
$(document).ready(function() {
$('#FromTime').change(function() {
var startDate = document.getElementById('FromDate').value;
var endDate = document.getElementById('ToDate').value;
var start = document.getElementById('FromTime').value;
var end = document.getElementById('ToTime').value;
var timeStart = new Date(startDate + start);
var timeEnd = new Date(endDate + end);
var difference = timeEnd.getTime() - timeStart.getTime(); // This will give difference in milliseconds
var resultInMinutes = (difference / 60000) / 60;
var x = Math.floor(resultInMinutes);
// var x = (Math.floor(resultInMinutes * 100) / 100).toFixed(0);
document.getElementById('duration').value = x;
});
$('#ToTime').change(function() {
var startDate = document.getElementById('FromDate').value;
var endDate = document.getElementById('ToDate').value;
var start = document.getElementById('FromTime').value;
var end = document.getElementById('ToTime').value;
var timeStart = new Date(startDate + start);
var timeEnd = new Date(endDate + end);
var difference = timeEnd.getTime() - timeStart.getTime(); // This will give difference in milliseconds
var resultInMinutes = (difference / 60000) / 60;
var x = Math.floor(resultInMinutes);
// var x = (Math.floor(resultInMinutes * 100) / 100).toFixed(0);
document.getElementById('duration').value = x;
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div class="input-field col m6 s12">
<label for="FromDate">From Date : </label></br>
</br>
<input type="date" name="FromDate" id="FromDate" autocomplete="off" required>
</div>
<div class="input-field col m6 s12">
<label for="ToDate">To Date : </label></br>
</br>
<input type="date" name="ToDate" id="ToDate" autocomplete="off" required>
</div>
<div class="input-field col m6 s12">
<label for="FromTime">From Time : </label></br>
</br>
<select id="FromTime" name="FromTime">
<option value="00:00:00">00:00 AM</option>
<option value="00:30:00">00:30 AM</option>
<option value="01:00:00">01:00 AM</option>
<option value="01:30:00">01:30 AM</option>
<option value="02:00:00">02:00 AM</option>
<option value="02:30:00">02:30 AM</option>
<option value="03:00:00">03:00 AM</option>
<option value="03:30:00">03:30 AM</option>
<option value="04:00:00">04:00 AM</option>
<option value="04:30:00">04:30 AM</option>
<option value="05:00:00">05:00 AM</option>
<option value="05:30:00">05:30 AM</option>
<option value="06:00:00">06:00 AM</option>
<option value="06:30:00">06:30 AM</option>
<option value="07:00:00">07:00 AM</option>
<option value="07:30:00">07:30 AM</option>
<option value="08:00:00">08:00 AM</option>
<option value="08:30:00">08:30 AM</option>
<option value="09:00:00">09:00 AM</option>
<option value="09:30:00">09:30 AM</option>
<option value="10:00:00">10:00 AM</option>
<option value="10:30:00">10:30 AM</option>
<option value="11:00:00">11:00 AM</option>
<option value="11:30:00">11:30 AM</option>
<option value="12:00:00">12:00 PM</option>
<option value="12:30:00">12:30 PM</option>
<option value="13:00:00">13:00 PM</option>
<option value="13:30:00">13:30 PM</option>
<option value="14:00:00">14:00 PM</option>
<option value="14:30:00">14:30 PM</option>
<option value="15:00:00">15:00 PM</option>
<option value="15:30:00">15:30 PM</option>
<option value="16:00:00">16:00 PM</option>
<option value="16:30:00">16:30 PM</option>
<option value="17:00:00">17:00 PM</option>
<option value="17:30:00">17:30 PM</option>
<option value="18:00:00">18:00 PM</option>
<option value="18:30:00">18:30 PM</option>
<option value="19:00:00">19:00 PM</option>
<option value="19:30:00">19:30 PM</option>
<option value="20:00:00">20:00 PM</option>
<option value="20:30:00">20:30 PM</option>
<option value="21:00:00">21:00 PM</option>
<option value="21:30:00">21:30 PM</option>
<option value="22:00:00">22:00 PM</option>
<option value="22:30:00">22:30 PM</option>
<option value="23:00:00">23:00 PM</option>
<option value="23:30:00">23:30 PM</option>
</select>
</div>
<div class="input-field col m6 s12">
<label for="ToTime">To Time : </label></br>
</br>
<select id="ToTime" name="ToTime">
<option value="00:00:00">00:00 AM</option>
<option value="00:30:00">00:30 AM</option>
<option value="01:00:00">01:00 AM</option>
<option value="01:30:00">01:30 AM</option>
<option value="02:00:00">02:00 AM</option>
<option value="02:30:00">02:30 AM</option>
<option value="03:00:00">03:00 AM</option>
<option value="03:30:00">03:30 AM</option>
<option value="04:00:00">04:00 AM</option>
<option value="04:30:00">04:30 AM</option>
<option value="05:00:00">05:00 AM</option>
<option value="05:30:00">05:30 AM</option>
<option value="06:00:00">06:00 AM</option>
<option value="06:30:00">06:30 AM</option>
<option value="07:00:00">07:00 AM</option>
<option value="07:30:00">07:30 AM</option>
<option value="08:00:00">08:00 AM</option>
<option value="08:30:00">08:30 AM</option>
<option value="09:00:00">09:00 AM</option>
<option value="09:30:00">09:30 AM</option>
<option value="10:00:00">10:00 AM</option>
<option value="10:30:00">10:30 AM</option>
<option value="11:00:00">11:00 AM</option>
<option value="11:30:00">11:30 AM</option>
<option value="12:00:00">12:00 PM</option>
<option value="12:30:00">12:30 PM</option>
<option value="13:00:00">13:00 PM</option>
<option value="13:30:00">13:30 PM</option>
<option value="14:00:00">14:00 PM</option>
<option value="14:30:00">14:30 PM</option>
<option value="15:00:00">15:00 PM</option>
<option value="15:30:00">15:30 PM</option>
<option value="16:00:00">16:00 PM</option>
<option value="16:30:00">16:30 PM</option>
<option value="17:00:00">17:00 PM</option>
<option value="17:30:00">17:30 PM</option>
<option value="18:00:00">18:00 PM</option>
<option value="18:30:00">18:30 PM</option>
<option value="19:00:00">19:00 PM</option>
<option value="19:30:00">19:30 PM</option>
<option value="20:00:00">20:00 PM</option>
<option value="20:30:00">20:30 PM</option>
<option value="21:00:00">21:00 PM</option>
<option value="21:30:00">21:30 PM</option>
<option value="22:00:00">22:00 PM</option>
<option value="22:30:00">22:30 PM</option>
<option value="23:00:00">23:00 PM</option>
<option value="23:30:00">23:30 PM</option>
</select>
</div>
解决方案
缺少输出
日期和时间之间缺少空格
var timeStart = new Date(`${startDate} ${start}`);
var timeEnd = new Date(`${endDate} ${end}`);
我修复了无效的 HTML 并将 jQuery 用于所有字段
$(document).ready(function() {
$('#FromTime').change(function() {
var startDate = $('#FromDate').val();
var endDate = $('#ToDate').val();
var start = $('#FromTime').val();
var end = $('#ToTime').val();
var timeStart = new Date(`${startDate} ${start}`);
var timeEnd = new Date(`${endDate} ${end}`);
var difference = timeEnd.getTime() - timeStart.getTime(); // This will give difference in milliseconds
var resultInMinutes = (difference / 60000) / 60;
var x = Math.floor(resultInMinutes);
// var x = (Math.floor(resultInMinutes * 100) / 100).toFixed(0);
console.log(x)
$('#duration').val(x);
});
$('#ToTime').change(function() {
var startDate = $('#FromDate').val();
var endDate = $('#ToDate').val();
var start = $('#FromTime').val();
var end = $('#ToTime').val();
var timeStart = new Date(`${startDate} ${start}`);
var timeEnd = new Date(`${endDate} ${end}`);
var difference = timeEnd.getTime() - timeStart.getTime(); // This will give difference in milliseconds
var resultInMinutes = (difference / 60000) / 60;
var x = Math.floor(resultInMinutes);
// var x = (Math.floor(resultInMinutes * 100) / 100).toFixed(0);
$('#duration').val(x);
});
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
Duration <input id="duration" readonly/>
<div class="input-field col m6 s12">
<label for="FromDate">From Date : </label></br>
<br/>
<input type="date" name="FromDate" id="FromDate" autocomplete="off" required>
</div>
<div class="input-field col m6 s12">
<label for="ToDate">To Date : </label></br>
<br/>
<input type="date" name="ToDate" id="ToDate" autocomplete="off" required>
</div>
<div class="input-field col m6 s12">
<label for="FromTime">From Time : </label></br>
<br/>
<select id="FromTime" name="FromTime">
<option value="00:00:00">00:00 AM</option>
<option value="00:30:00">00:30 AM</option>
<option value="01:00:00">01:00 AM</option>
<option value="01:30:00">01:30 AM</option>
<option value="02:00:00">02:00 AM</option>
<option value="02:30:00">02:30 AM</option>
<option value="03:00:00">03:00 AM</option>
<option value="03:30:00">03:30 AM</option>
<option value="04:00:00">04:00 AM</option>
<option value="04:30:00">04:30 AM</option>
<option value="05:00:00">05:00 AM</option>
<option value="05:30:00">05:30 AM</option>
<option value="06:00:00">06:00 AM</option>
<option value="06:30:00">06:30 AM</option>
<option value="07:00:00">07:00 AM</option>
<option value="07:30:00">07:30 AM</option>
<option value="08:00:00">08:00 AM</option>
<option value="08:30:00">08:30 AM</option>
<option value="09:00:00">09:00 AM</option>
<option value="09:30:00">09:30 AM</option>
<option value="10:00:00">10:00 AM</option>
<option value="10:30:00">10:30 AM</option>
<option value="11:00:00">11:00 AM</option>
<option value="11:30:00">11:30 AM</option>
<option value="12:00:00">12:00 PM</option>
<option value="12:30:00">12:30 PM</option>
<option value="13:00:00">13:00 PM</option>
<option value="13:30:00">13:30 PM</option>
<option value="14:00:00">14:00 PM</option>
<option value="14:30:00">14:30 PM</option>
<option value="15:00:00">15:00 PM</option>
<option value="15:30:00">15:30 PM</option>
<option value="16:00:00">16:00 PM</option>
<option value="16:30:00">16:30 PM</option>
<option value="17:00:00">17:00 PM</option>
<option value="17:30:00">17:30 PM</option>
<option value="18:00:00">18:00 PM</option>
<option value="18:30:00">18:30 PM</option>
<option value="19:00:00">19:00 PM</option>
<option value="19:30:00">19:30 PM</option>
<option value="20:00:00">20:00 PM</option>
<option value="20:30:00">20:30 PM</option>
<option value="21:00:00">21:00 PM</option>
<option value="21:30:00">21:30 PM</option>
<option value="22:00:00">22:00 PM</option>
<option value="22:30:00">22:30 PM</option>
<option value="23:00:00">23:00 PM</option>
<option value="23:30:00">23:30 PM</option>
</select>
</div>
<div class="input-field col m6 s12">
<label for="ToTime">To Time : </label></br>
<br/>
<select id="ToTime" name="ToTime">
<option value="00:00:00">00:00 AM</option>
<option value="00:30:00">00:30 AM</option>
<option value="01:00:00">01:00 AM</option>
<option value="01:30:00">01:30 AM</option>
<option value="02:00:00">02:00 AM</option>
<option value="02:30:00">02:30 AM</option>
<option value="03:00:00">03:00 AM</option>
<option value="03:30:00">03:30 AM</option>
<option value="04:00:00">04:00 AM</option>
<option value="04:30:00">04:30 AM</option>
<option value="05:00:00">05:00 AM</option>
<option value="05:30:00">05:30 AM</option>
<option value="06:00:00">06:00 AM</option>
<option value="06:30:00">06:30 AM</option>
<option value="07:00:00">07:00 AM</option>
<option value="07:30:00">07:30 AM</option>
<option value="08:00:00">08:00 AM</option>
<option value="08:30:00">08:30 AM</option>
<option value="09:00:00">09:00 AM</option>
<option value="09:30:00">09:30 AM</option>
<option value="10:00:00">10:00 AM</option>
<option value="10:30:00">10:30 AM</option>
<option value="11:00:00">11:00 AM</option>
<option value="11:30:00">11:30 AM</option>
<option value="12:00:00">12:00 PM</option>
<option value="12:30:00">12:30 PM</option>
<option value="13:00:00">13:00 PM</option>
<option value="13:30:00">13:30 PM</option>
<option value="14:00:00">14:00 PM</option>
<option value="14:30:00">14:30 PM</option>
<option value="15:00:00">15:00 PM</option>
<option value="15:30:00">15:30 PM</option>
<option value="16:00:00">16:00 PM</option>
<option value="16:30:00">16:30 PM</option>
<option value="17:00:00">17:00 PM</option>
<option value="17:30:00">17:30 PM</option>
<option value="18:00:00">18:00 PM</option>
<option value="18:30:00">18:30 PM</option>
<option value="19:00:00">19:00 PM</option>
<option value="19:30:00">19:30 PM</option>
<option value="20:00:00">20:00 PM</option>
<option value="20:30:00">20:30 PM</option>
<option value="21:00:00">21:00 PM</option>
<option value="21:30:00">21:30 PM</option>
<option value="22:00:00">22:00 PM</option>
<option value="22:30:00">22:30 PM</option>
<option value="23:00:00">23:00 PM</option>
<option value="23:30:00">23:30 PM</option>
</select>
</div>
推荐阅读
- javascript - RegEx 用于匹配除逗号分隔的数字之外的所有字符
- java - 如何从 selenium java 中的 SVG 标签内的“文本”标签中获取值
- typo3 - 如何在流体模板表单元素中输出 COA_INT
- r - 如何提高使用 ggplot 创建的线图的质量
- docker - 找到您要从中导入的底层 Docker 文件
- angular - 从Angular中的父组件访问子ngIf
- swift - 如何使用 @available 弃用/重命名 swift 函数。函数有多个参数
- vert.x - 使用 Vert.x 事件总线时没有地址“演示”的处理程序
- jupyter-notebook - Mac OS 中 Jupyter notebook 中插入图片的问题
- java - informix 指定的表(t_all)不在数据库中?