简体   繁体   中英

Calculate time remaining between now and a precise hour of next day

What's the most concise, performant way to get in Javascript the minutes remaining between now, and the upcoming day at 01:00 (am)?

Then, once the current time is after 01:00 , I start calculating the difference to the next.

in javascript, a specified date can be provided like this

var date1 = new Date('June 6, 2019 03:24:00');

or it can be specified like this

var date2 = new Date('2019-6-6T03:24:00');

javascript can natively subtract 2 dates

console.log(date1 - date2);
//expected 0;

using this method will output the difference in the dates in milliseconds, to get minutes you'll want to divide the value by 60000;

so

var futureTime = new Date('2019-06-06T07:24:00');
//there must be a 0 infront of 1 digit numbers or it is an invalid date
var now = new Date();
var difference = (futureTime - now) / 60000;
//get minutes by dividing by 60000
//doing Date() with no arguments returns the current date

read about the javascript Date object here for more information https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

let now = new Date();
let next1am = new Date();
next1am.setHours(1, 0, 0, 0); // same as now, but at 01:00:00.000
if (next1am < now) next1am.setDate(next1am.getDate() + 1); // bump date if past
let millisecondDiff = next1am - now;
let minuteDiff = Math.floor(millisecondDiff / 1000 / 60);

you can you moment.js here

var current = new Date()
var end = new Date(start.getTime() + 3600*60)// end time to calculate diff

var minDiff = end - start; // in millisec

You can calculate by pure JavaScript:

let today = new Date();
let [y,M,d,h,m,s] = '2019-06-04 05:00:11'.split(/[- :]/);
let yourDate = new Date(y,parseInt(M)-1,d,h,parseInt(m)+30,s);
let diffMs = (yourDate - today);
let diffDays = Math.floor(diffMs / 86400000); // days
let diffHrs = Math.floor((diffMs % 86400000) / 3600000); // hours
let diffMins = (diffDays * 24 * 60) 
               +  (diffHrs *60) 
               +  Math.round(((diffMs % 86400000) % 3600000) / 60000); // The overall result
                                                                       // in minutes

In, addition avoid using the built–in parser for any non–standard format, eg in Safari new Date("2019-04-22 05:00:11") returns an invalid date. You really shouldn't even use if for standardized formats as you will still get unexpected results for some formats. Why does Date.parse give incorrect results?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM