有没有人可以将我链接到一些教程,在那里我可以找到如何在 2 个 unix 日期时间之间的 javascript 中返回天数、小时数、分钟数、秒数?
我有:
var date_now = unixtimestamp;
var date_future = unixtimestamp;
我想返回(实时)从 date_now 到 date_future 还剩多少天、小时、分钟、秒。
有没有人可以将我链接到一些教程,在那里我可以找到如何在 2 个 unix 日期时间之间的 javascript 中返回天数、小时数、分钟数、秒数?
我有:
var date_now = unixtimestamp;
var date_future = unixtimestamp;
我想返回(实时)从 date_now 到 date_future 还剩多少天、小时、分钟、秒。
只需找出以秒为单位的差异(不要忘记 JS 时间戳实际上以毫秒为单位)并分解该值:
// get total seconds between the times
var delta = Math.abs(date_future - date_now) / 1000;
// calculate (and subtract) whole days
var days = Math.floor(delta / 86400);
delta -= days * 86400;
// calculate (and subtract) whole hours
var hours = Math.floor(delta / 3600) % 24;
delta -= hours * 3600;
// calculate (and subtract) whole minutes
var minutes = Math.floor(delta / 60) % 60;
delta -= minutes * 60;
// what's left is seconds
var seconds = delta % 60; // in theory the modulus is not required
编辑代码进行了调整,因为我刚刚意识到原始代码返回了总小时数等,而不是计算一整天后剩余的小时数。
这是在javascript中:(例如,未来的日期是元旦)
DEMO(每秒更新一次)
var dateFuture = new Date(new Date().getFullYear() +1, 0, 1);
var dateNow = new Date();
var seconds = Math.floor((dateFuture - (dateNow))/1000);
var minutes = Math.floor(seconds/60);
var hours = Math.floor(minutes/60);
var days = Math.floor(hours/24);
hours = hours-(days*24);
minutes = minutes-(days*24*60)-(hours*60);
seconds = seconds-(days*24*60*60)-(hours*60*60)-(minutes*60);
我将其称为“雪人 ☃ 方法”,我认为当您需要额外的时间跨度(如周、飞蛾、年、世纪……)并且不想要太多重复代码时,它会更灵活一些:
var d = Math.abs(date_future - date_now) / 1000; // delta
var r = {}; // result
var s = { // structure
year: 31536000,
month: 2592000,
week: 604800, // uncomment row to ignore
day: 86400, // feel free to add your own row
hour: 3600,
minute: 60,
second: 1
};
Object.keys(s).forEach(function(key){
r[key] = Math.floor(d / s[key]);
d -= r[key] * s[key];
});
// for example: {year:0,month:0,week:1,day:2,hour:34,minute:56,second:7}
console.log(r);
有 FIDDLE/ ES6 Version (2018)/TypeScript Version (2019)
灵感来自Alnitak的回答。
我的解决方案没有那么清楚,但我把它作为另一个例子
console.log(duration('2019-07-17T18:35:25.235Z', '2019-07-20T00:37:28.839Z'));
function duration(t0, t1){
let d = (new Date(t1)) - (new Date(t0));
let weekdays = Math.floor(d/1000/60/60/24/7);
let days = Math.floor(d/1000/60/60/24 - weekdays*7);
let hours = Math.floor(d/1000/60/60 - weekdays*7*24 - days*24);
let minutes = Math.floor(d/1000/60 - weekdays*7*24*60 - days*24*60 - hours*60);
let seconds = Math.floor(d/1000 - weekdays*7*24*60*60 - days*24*60*60 - hours*60*60 - minutes*60);
let milliseconds = Math.floor(d - weekdays*7*24*60*60*1000 - days*24*60*60*1000 - hours*60*60*1000 - minutes*60*1000 - seconds*1000);
let t = {};
['weekdays', 'days', 'hours', 'minutes', 'seconds', 'milliseconds'].forEach(q=>{ if (eval(q)>0) { t[q] = eval(q); } });
return t;
}