1. ホーム
  2. javascript

[解決済み] moment.jsで秒をHH:mm:ssに変換する方法

2022-10-28 07:50:27

質問

秒を HH:mm:ss ?

今のところ、以下のような関数を使用しています。

render: function (data){
     return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}

これはクロームで動作しますが、ファイヤフォックスでは12秒間、次のようになります。 01:00:12 クロスブラウザの互換性のためにmoment.jsを使いたいのですが。

私はこれを試してみましたが、動作しません

render: function (data){
         return moment(data).format('HH:mm:ss');
}

私は何を間違えているのでしょうか?

EDIT

解決策を見つけることができました。 を使わずに moment.jsは次のようになります。

return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

moment.jsでどうやったらいいのか、まだわからない。

どのように解決するのですか?

から この記事 私は、リープの問題を避けるために、次のことを試してみます。

moment("2015-01-01").startOf('day')
    .seconds(s)
    .format('H:mm:ss');

jsPerfを実行したわけではありませんが、新しい日付オブジェクトを100万回作成するよりもこちらの方が早いと思います。

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
  // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return `${pad(hours)}:${pad(minutes)}:${pad(secs)}`;
  // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers
}

for (var i=60;i<=60*60*5;i++) {
 document.write(hhmmss(i)+'<br/>');
}


/* 
function show(s) {
  var d = new Date();
  var d1 = new Date(d.getTime()+s*1000);
  var  hms = hhmmss(s);
  return (s+"s = "+ hms + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]);
}    
*/