[解決済み】2つのデータタイム間の時差を取得する
質問
私はmomentjsで日付に関係することなら何でもできることを知っています。しかし、恥ずかしながら、私は2つの時間の差を得るという単純に見えることをやろうとして苦労しています。
例
var now = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";
//expected result:
"00:39:30"
私が試したこと
var now = moment("04/09/2013 15:00:00");
var then = moment("04/09/2013 14:20:30");
console.log(moment(moment.duration(now.diff(then))).format("hh:mm:ss"))
//outputs 10:39:30
その"10"が何なのか理解できないのですが。私はブラジルに住んでいるので、それが関連している場合、我々はutc - 0300です。
の結果は
moment.duration(now.diff(then))
は、正しい内部値を持つデュレーションです。
days: 0
hours: 0
milliseconds: 0
minutes: 39
months: 0
seconds: 30
years: 0
つまり、私の質問は、momentjsのDurationを時間間隔に変換する方法でしょうか?私は確かに使用することができます
duration.get("hours") +":"+ duration.get("minutes") +:+ duration.get("seconds")
でも、もっと何かがあるような気がする。 エレガント というのが、完全に抜け落ちている。
アップデート
よく見ると、上記の例では
now
は
Tue Apr 09 2013 15:00:00 GMT-0300 (E. South America Standard Time)…}
と
moment(moment.duration(now.diff(then)))
があります。
Wed Dec 31 1969 22:39:30 GMT-0200 (E. South America Daylight Time)…}
なぜ2番目の値がサマータイム(-0200)なのかはよくわかりませんが、私が日付好きでないことは確かです :(
更新2
まあ、値が-0200なのは、1969年12月31日がサマータイムが使われていた日だからだろう...ということですな。
解決方法は?
この方法は、合計時間が24時間未満の場合のみ有効です。
var now = "04/09/2013 15:00:00";
var then = "04/09/2013 14:20:30";
moment.utc(moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"))).format("HH:mm:ss")
// outputs: "00:39:30"
24時間以上ある場合、上記の方法では時間がゼロにリセットされてしまうので、理想的ではありません。
24時間以上の継続時間に対して有効なレスポンスを取得したい場合。 の場合は、代わりに以下のような処理を行う必要があります。
var now = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";
var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = Math.floor(d.asHours()) + moment.utc(ms).format(":mm:ss");
// outputs: "48:39:30"
utcの時間をショートカットとして使っていることに注意してください。 このように
d.minutes()
と
d.seconds()
を別途用意する必要がありますが、ゼロパットも必要です。
をフォーマットする機能が必要なのです。
duration
オブジェクトは、現在 moment.js にはありません。
ここで要求されている
. しかし、サードパーティ製のプラグインで
モーメント・デュレーション・フォーマット
は、この目的に特化したものです。
var now = "04/09/2013 15:00:00";
var then = "02/09/2013 14:20:30";
var ms = moment(now,"DD/MM/YYYY HH:mm:ss").diff(moment(then,"DD/MM/YYYY HH:mm:ss"));
var d = moment.duration(ms);
var s = d.format("hh:mm:ss");
// outputs: "48:39:30"
関連
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] JavaScriptで現在の日付を取得するには?
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] time(1) の出力における 'real', 'user' および 'sys' はどのような意味ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み] Androidで現在の時刻と日付を取得する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】JavaScript ランタイムエラー:'$'が未定義です。
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】HTMLの最初の行に予期しないトークン<がある。
-
[解決済み】Vueが定義されていない
-
[解決済み】2つの日付の間の日数を計算する方法