88

2つのUNIX日時の間でjavascriptで日、時間、分、秒を返す方法を見つけることができるチュートリアルにリンクできますか?

私は持っている:

var date_now = unixtimestamp;
var date_future = unixtimestamp;

date_now から date_future までの残り日数、時間、分、秒を (ライブで) 返したいと思います。

4

22 に答える 22

215

秒単位の差を計算し (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

元のコードが、丸一日を数えた後の残り時間数ではなく、総時間数などを返すことに気付いたので、編集コードを調整しました。

于 2012-12-16T18:13:08.363 に答える
53

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);
于 2012-12-16T19:13:51.773 に答える
45

私はこれを「雪だるま ☃ メソッド」と呼んでいます。週、月、年、世紀などの追加のタイムスパンが必要で、コードの繰り返しがあまり必要ない場合は、もう少し柔軟性があると思います。

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の回答に触発されました。

于 2015-09-11T01:42:15.240 に答える
11

うるう年や「夏時間」の切り替えなど、差分だけで計算してもすべての場合が対象とはなりませんのでご注意ください。

Javascript には、日付を操作するための貧弱な組み込みライブラリがあります。MomentJSなどのサードパーティの JavaScript ライブラリを使用することをお勧めします。探していた関数がここに表示されます。

于 2012-12-16T18:02:49.377 に答える
5

たとえば、 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();
于 2018-09-28T07:15:56.427 に答える
3
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;
}
于 2016-07-02T07:21:08.053 に答える
1
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));
于 2020-12-17T17:09:54.747 に答える