javascript - 无法使用 JavaScript 计算时差
问题描述
我需要使用 JavaScript 计算当前日期时间和用户输入日期时间之间的时差。这是我的代码:
var user_date = '31-03-2019';
var dep_time='12:30PM';
var datePieces = user_date.split("-");
var mydate=[datePieces[1] , datePieces[0] , datePieces[2]].join("-");
var todayDate = new Date();
var todayMonth = todayDate.getMonth() + 1;
var todayDay = todayDate.getDate();
var todayYear = todayDate.getFullYear();
if (todayDay < 10) {
todayDay = '0' + todayDay;
}
if (todayMonth < 10) {
todayMonth = '0' + todayMonth;
}
var todayDateText = todayMonth + "-" + todayDay + "-" + todayYear;
var inputToDate = Date.parse(mydate);
var todayToDate = Date.parse(todayDateText);
//console.log(inputToDate, todayToDate);
//console.log(user_date, todayDateText);
if (inputToDate > todayToDate) {
var date=new Date;
var hours = date.getHours();
var minutes = date.getMinutes();
var ampm = hours >= 12 ? 'pm' : 'am';
hours = hours % 12;
hours = hours ? hours : 12; // the hour '0' should be '12'
minutes = minutes < 10 ? '0'+minutes : minutes;
var strTime = hours + ':' + minutes + ' ' + ampm;
var timeStart = new Date(todayToDate + strTime);
var timeEnd = new Date(mydate + dep_time);
console.log(timeStart);
console.log(timeEnd);
var diff = (timeEnd - timeStart) / 60000; //dividing by seconds and milliseconds
var minutes = diff % 60;
var hours = (diff - minutes) / 60;
alert(hours);
} else {
}
在这里我得到了输出NAN
。我有用户输入和当前日期时间,我需要HRS
.
解决方案
1) Date.parse 方法将日期转换为自 1970 年 1 月 1 日以来的毫秒数。请参阅 https://www.w3schools.com/Jsref/jsref_parse.asp,因此将您的用户输入日期转换为自 1970 年 1 月 1 日以来的毫秒数。
2) 在 Javascript 中,新 Date() 对象的 getTime() 方法获取自 1970 年 1 月 1 日到当前时间所经过的毫秒数。
3)因此,找到这些毫秒的差异会给您以毫秒为单位的差异。
4) 由于 1 小时 = 3600000 毫秒,要找出小时数的差异,请将您的答案除以 3600000,然后得到小时数的差异。
- 您似乎也忘记在解析日期时包含 dep_time 。
解决方案如下:
<script>
"use strict";
var user_date = '31-03-2019 12:30 PM';
var datePieces = user_date.split("-");
var mydate=[datePieces[1] , datePieces[0] , datePieces[2]].join("-");
var todayDate = new Date();
var todayToDate = todayDate.getTime();
// In JavaScript, getTime() gets the number of milliseconds that have passed since January 1, 1970.
var inputToDate = Date.parse(mydate);
if (inputToDate > todayToDate) {
var diff = (inputToDate - todayToDate) / 3600000; //Since 1 h = 3600000 ms
alert(diff);
} else {
var diff = (todayToDate - inputToDate) / 3600000; //Since 1 h = 3600000 ms
alert(diff);
}
</script>
推荐阅读
- hive - Hive 中有一个简单的宏变量吗?
- java - 当用户单击时生成 N 个随机 4digit int 字符串和 7char 字符串生成按钮并在用户单击时显示全部显示按钮使用 sharedpreferences
- linux - dlang 是否默认安装一些信号处理程序
- swift - 试图在两个视图控制器之间传递核心数据
- netbeans - 尝试使用 Opendaylight 解析 YANG 文件但遇到 SchemaResolutionException
- jms - 在 Wildfly 12 中配置 ActiveMQ Artemis 以在集群中交付时间关键的消息
- python - Int 被读取为文本?Python
- r - 迭代地在 dplyr 中创建多个新的 mutate 列 - 纬度和经度
- python - 在 Python 中比较和均衡两个数据帧
- javascript - 有没有更有效的方法来检查列数?