3

JavaScript で 1 つのタイマー アプリケーションを作成しました。まず、現在の UTC 日付を参照してタイマーを初期化します。ここにコードがあります

on_timer: function(e) {
            var self = this;
            if ($(e.target).hasClass("pt_timer_start")) {
                var current_date = this.get_current_UTCDate();
                this.project_timesheet_db.set_current_timer_activity({date: current_date});
                this.start_interval();
                this.initialize_timer();
                this.$el.find(".pt_timer_start,.pt_timer_stop").toggleClass("o_hidden");

ここで、タイマーが開始されると、一定の時間間隔が経過した後、上記のon_timer: function(e)関数を参照してタイマーに一定の時間が経過します。

この機能は

start_interval: function() {
            var timer_activity = this.project_timesheet_db.get_current_timer_activity();
            var self = this;
            this.intervalTimer = setInterval(function(){
                self.$el.find(".pt_duration").each(function() {
                    var el_hour = $(this).find("span.hours");
                    var el_minute = $(this).find("span.minutes");
                    var minute = parseInt(el_minute.text());
                    if(minute >= 60) {
                        el_hour.text(_.str.sprintf("%02d", parseInt(el_hour.text()) + 1));
                        minute = 0;
                    }
                    el_minute.text(_.str.sprintf("%02d", minute));
                    var el_second = $(this).find("span.seconds");
                    var seconds = parseInt(el_second.text()) + 1;
                    if(seconds > 60) {
                        el_minute.text(_.str.sprintf("%02d", parseInt(el_minute.text()) + 1));
                        seconds = 0;
                    }
                    el_second.text(_.str.sprintf("%02d", seconds));
                });
            }, 1000);
        },

さて、el_hourel_minuteel_secondsを考慮して、初期化時刻と現在のタイマー値の時間差を HH:MM:SS の方法でカウントする方法を教えてください。

助けてくれてありがとう

4

5 に答える 5

12

H:M:S を秒に変換するには、次のような単純な関数を使用できます。

// Convert H:M:S to seconds
// Seconds are optional (i.e. n:n is treated as h:s)
function hmsToSeconds(s) {
  var b = s.split(':');
  return b[0]*3600 + b[1]*60 + (+b[2] || 0);
}

次に、秒を HMS に戻すには:

// Convert seconds to hh:mm:ss
// Allow for -ve time values
function secondsToHMS(secs) {
  function z(n){return (n<10?'0':'') + n;}
  var sign = secs < 0? '-':'';
  secs = Math.abs(secs);
  return sign + z(secs/3600 |0) + ':' + z((secs%3600) / 60 |0) + ':' + z(secs%60);
}

var a = '01:43:28';
var b = '12:22:46';

console.log(secondsToHMS(hmsToSeconds(a) - hmsToSeconds(b)));  // -10:39:18
console.log(secondsToHMS(hmsToSeconds(b) - hmsToSeconds(a)));  //  10:39:18

関数名を次のように省略したい場合があります。

toHMS(toSec(a) - toSec(b));  // -10:39:18

これは、時間が夏時間の境界を越える可能性がある場所をカバーしていないことに注意してください。そのためには、年、月、日を含む完全修飾日付が必要です。値を使用して日付オブジェクトを作成し、差を見つけて、秒に変換し、secondsToHMS関数を使用します。

編集

質問のタイトルには日付が記載されていますが、内容には時間、分、秒の文字列のみが記載されているようです。

Date オブジェクトがある場合は、次を使用してミリ秒単位でそれらの差を取得できます。

var diffMilliseconds = date0 - date1;

そして秒に変換します:

var diffSeconds = diffMilliseconds / 1000;

上記のsecondsToHMS関数を使用して、HH:MM:SS として表示します。

secondsToHMS((date0 - date1) / 1000);

例えば

var d0 = new Date(2014,10,10,1,43,28);
var d1 = new Date(2014,10,10,12,22,46);

console.log( secondsToHMS((d0 - d1) / 1000));  // -10:39:18
于 2014-10-27T03:14:33.837 に答える
3
const dateDiffToString = (a, b) => {
  let diff = Math.abs(a - b);

  let ms = diff % 1000;
  diff = (diff - ms) / 1000;
  let s = diff % 60;
  diff = (diff - s) / 60;
  let m = diff % 60;
  diff = (diff - m) / 60;
  let h = diff;

  let ss = s <= 9 && s >= 0 ? `0${s}` : s;
  let mm = m <= 9 && m >= 0 ? `0${m}` : m;
  let hh = h <= 9 && h >= 0 ? `0${h}` : h;

  return hh + ':' + mm + ':' + ss;
};
于 2020-06-13T17:03:59.217 に答える
1

これは簡単な答えかもしれません

var d1 = new Date(2014,10,11,1,43,28);
var d2 = new Date(2014,10,11,2,53,58);
var date = new Date(d2-d1);
var hour = date.getUTCHours();
var min = date.getUTCMinutes();
var sec = date.getUTCSeconds();
var day = date.getUTCDate() - 1;
console.log(day + ":" + hour + ":" + min + ":" + sec)

于 2018-11-30T08:47:18.717 に答える