首页 > 解决方案 > 无法使用 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.

标签: javascriptdatetime

解决方案


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>

推荐阅读