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 では次のようになります: (たとえば、将来の日付は元日です)
デモ(毎秒更新)
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の回答に触発されました。
たとえば、 moment.jsライブラリを使用します。
var time = date_future - date_now;
var seconds = moment.duration(time).seconds();
var minutes = moment.duration(time).minutes();
var hours = moment.duration(time).hours();
var days = moment.duration(time).days();
function update(datetime = "2017-01-01 05:11:58") {
var theevent = new Date(datetime);
now = new Date();
var sec_num = (theevent - now) / 1000;
var days = Math.floor(sec_num / (3600 * 24));
var hours = Math.floor((sec_num - (days * (3600 * 24)))/3600);
var minutes = Math.floor((sec_num - (days * (3600 * 24)) - (hours * 3600)) / 60);
var seconds = Math.floor(sec_num - (days * (3600 * 24)) - (hours * 3600) - (minutes * 60));
if (hours < 10) {hours = "0"+hours;}
if (minutes < 10) {minutes = "0"+minutes;}
if (seconds < 10) {seconds = "0"+seconds;}
return days+':'+ hours+':'+minutes+':'+seconds;
}
const arrDiff = [
{
label: 'second',
value: 1000,
},
{
label: 'minute',
value: 1000 * 60,
},
{
label: 'hour',
value: 1000 * 60 * 60,
},
{
label: 'day',
value: 1000 * 60 * 60 * 24,
},
{
label: 'year',
value: 1000 * 60 * 60 * 24 * 365,
},
];
function diff(date) {
let result = { label: '', value: '' };
const value = Date.now() - date;
for (let obj of arrDiff) {
let temp = Math.round(value / obj.value);
if (temp === 0) {
break;
} else
result = {
value: temp,
label: obj.label,
};
}
return result;
}
const postDate = new Date('2020-12-17 23:50:00+0700');
console.log(diff(postDate));