Durationオブジェクトに moment.jsformat
メソッドを使用する方法はありますか?私はそれをドキュメントのどこにも見つけることができず、それはdurationオブジェクトの属性とは見なされません。
以下のようなことができるようになりたいです。
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format('hh:mm:ss')
また、この種の機能に簡単に対応できるライブラリが他にあれば、お勧めに興味があります。
ありがとうございます。
Moment.jsの期間にある種のフォーマットを追加することを検討しています。 https://github.com/timrwood/moment/issues/46 を参照してください
役立つかもしれない他のライブラリは、 http://countdownjs.org/ と https://github.com/icambron/twix.js です。
// set up
let start = moment("2018-05-16 12:00:00"); // some random moment in time (in ms)
let end = moment("2018-05-16 12:22:00"); // some random moment after start (in ms)
let diff = end.diff(start);
// execution
let f = moment.utc(diff).format("HH:mm:ss.SSS");
alert(f);
期間をミリ秒に変換し、次にモーメントに変換します。
moment.utc(duration.as('milliseconds')).format('HH:mm:ss')
var diff = moment(end).unix() - moment(start).unix();
moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");
私の特定のユースケースに最適なシナリオは、次のとおりです。
var duration = moment.duration("09:30"),
formatted = moment.utc(duration.asMilliseconds()).format("HH:mm");
プライベート内部プロパティ_dataにアクセスしないので、これは@ Wilsonの答えを改善します。
私が使う:
var duration = moment.duration("09:30");
var str = moment(duration._data).format("HH:mm");
そして、var strに "09:30"が表示されます。
あなたは.formatを必要としません。このような期間を使用してください。
const duration = moment.duration(83, 'seconds');
console.log(duration.minutes() + ':' +duration.seconds());
// output: 1:23
私はここでこの解決策を見つけた: https://github.com/moment/moment/issues/46
編集:
また、数秒、数分、数時間のパディングがあります。
const withPadding = (duration) => {
if (duration.asDays() > 0) {
return 'at least one day';
} else {
return [
('0' + duration.hours()).slice(-2),
('0' + duration.minutes()).slice(-2),
('0' + duration.seconds()).slice(-2),
].join(':')
}
}
withPadding(moment.duration(83, 'seconds'))
// 00:01:23
withPadding(moment.duration(6048000, 'seconds'))
// at least one day
別のJavaScriptライブラリを使用する場合は、 numbers.js で秒を次のように書式設定できます(例は1000秒用です)。
var string = numeral(1000).format('00:00');
// '00:16:40'
私はこれらの場合に古典的なフォーマット機能を使用します。
var diff = moment(end).unix() - moment(start).unix();
//use unix function instead of difference
moment.unix(diff).format('hh:mm:ss')
これはハックです。なぜなら、時間の差分は標準的な瞬間の日付、初期のエポックの日付の時間として扱われるからです。しかし、それは私たちの目標にとっては重要ではなく、プラグインも必要ありません。
diffが瞬間の場合
var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);
ni-ko-o-kinの答え :に基づく
meassurements = ["years", "months", "weeks", "days", "hours", "minutes", "seconds"];
withPadding = (duration) => {
var step = null;
return meassurements.map((m) => duration[m]()).filter((n,i,a) => {
var nonEmpty = Boolean(n);
if (nonEmpty || step || i >= a.length - 2) {
step = true;
}
return step;
}).map((n) => ('0' + n).slice(-2)).join(':')
}
duration1 = moment.duration(1, 'seconds');
duration2 = moment.duration(7200, 'seconds');
duration3 = moment.duration(604800, 'seconds');
withPadding(duration1); // 00:01
withPadding(duration2); // 02:00:00
withPadding(duration3); // 01:07:00:00:00
あなたが角度を使用するならば、あなたのフィルターにこれを加えてください:
.filter('durationFormat', function () {
return function (value) {
var days = Math.floor(value/86400000);
value = value%86400000;
var hours = Math.floor(value/3600000);
value = value%3600000;
var minutes = Math.floor(value/60000);
value = value%60000;
var seconds = Math.floor(value/1000);
return (days? days + ' days ': '') + (hours? hours + ' hours ': '') + (minutes? minutes + ' minutes ': '') + (seconds? seconds + ' seconds ': '')
}
})
使用例
<div> {{diff | durationFormat}} </div>
このコード行を使用してください。
moment.utc(moment.duration(4500, "seconds").asMilliseconds()).format("HH:mm:ss")
すべての時間を表示する必要があり(24時間以上)、時間の前に '0'が必要ない場合は、短いコードでフォーマットを実行できます。
Math.floor(duration.as('h')) + moment.utc(duration.as('ms')).format(':mm:ss')
瞬間期間を文字列にフォーマットするには
var duration = moment.duration(86400000); //value in milliseconds
var hours = duration.hours();
var minutes = duration.minutes();
var seconds = duration.seconds();
var milliseconds = duration.milliseconds();
var date = moment().hours(hours).minutes(minutes).seconds(seconds).millisecond(milliseconds);
if (is12hr){
return date.format("hh:mm:ss a");
}else{
return date.format("HH:mm:ss");
}
ネイティブJavaScriptはどうですか?
var formatTime = function(integer) {
if(integer < 10) {
return "0" + integer;
} else {
return integer;
}
}
function getDuration(ms) {
var s1 = Math.floor(ms/1000);
var s2 = s1%60;
var m1 = Math.floor(s1/60);
var m2 = m1%60;
var h1 = Math.floor(m1/60);
var string = formatTime(h1) +":" + formatTime(m2) + ":" + formatTime(s2);
return string;
}
import * as moment from 'moment'
var sleep = require('sleep-promise');
(async function () {
var t1 = new Date().getTime();
await sleep(1000);
var t2 = new Date().getTime();
var dur = moment.duration(t2-t1);
console.log(`${dur.hours()}h:${dur.minutes()}m:${dur.seconds()}s`);
})();
0h:0m:1s
これは私のために働く:
moment({minutes: 150}).format('HH:mm') // 01:30
これが最善の方法だと思います。
var diff = moment(end).unix() - moment(start).unix();
moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");
またはこれを試してください。
var momentInSeconds = moment.duration(n,'seconds')
console.log(("0" + Math.floor(momentInSeconds.asHours())).slice(-2) + ':' + ("0" + momentInSeconds.minutes()).slice(-2) + ':' + ("0" + momentInSeconds.seconds()).slice(-2))
const duration = moment.duration(62, 'hours');
const n = 24 * 60 * 60 * 1000;
const days = Math.floor(duration / n);
const str = moment.utc(duration % n).format('H [h] mm [min] ss [s]');
console.log(`${days > 0 ? `${days} ${days == 1 ? 'day' : 'days'} ` : ''}${str}`);
プリント:
2日14時間00分00秒
他のライブラリを含まず、diff> 24hで動作する私のソリューション
var momentInSeconds = moment.duration(n,'seconds')
console.log(("0" + Math.floor(momentInSeconds.asHours())).slice(-2) + ':' + ("0" + momentInSeconds.minutes()).slice(-2) + ':' + ("0" + momentInSeconds.seconds()).slice(-2))