[解決済み] momentjs を使って日付をエポックに変換し、日付に戻す。
質問
日付文字列をエポックに変換し、その後、正しい日付文字列を提供しているかどうかを確認するために、日付文字列にエポックを戻そうとしています。
var epoch = moment("10/15/2014 9:00").unix(); // do I need to do .local()?
var momentDate = moment(epoch); // I've also tried moment.utc(epoch)
var momentDateStr = momentDate.calendar();
alert("Values are: epoch = " + epoch + ", momentDateStr = " + momentDateStr);
レンダリング
Values are: epoch = 1413378000, momentDateStr = 01/17/1970
注:モーメントjsスクリプトの以下のバージョンを使用しています、/cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/modent-with-locales.js。
どのように解決するのですか?
いくつか問題があるようです。
-
まず、用語について。 "エポック"。 とは、何かの開始点を意味します。 Unix Epoch" は UTC 1970年1月1日午前0時です。 任意の日付文字列をエポックに変換することはできません。 おそらく "Unixタイム" のことでしょう。これはしばしば間違って "Epoch Time" と呼ばれます。
-
.unix()
はUnix Timeを秒単位で返しますが、デフォルトのmoment
のコンストラクタはタイムスタンプを ミリ秒 . 代わりに.valueOf()
を使ってミリ秒を返します。 ただし.unix()*1000
を呼び出しても動作しますが、精度が落ちてしまうことに注意してください。 -
フォーマット指定子を指定せずに文字列を解析しています。 コードが実行されている場所のロケールによって、1/2/2014 のような値が February 1st または January 2nd として解釈される可能性があるため、これは良いアイデアではありません。 (これはコンソールに非推奨の警告が表示される理由でもあります。) そのかわりに 形式の文字列 のような、期待される入力にマッチするフォーマット文字列を指定します。
moment("10/15/2014 9:00", "M/D/YYYY H:mm")
-
.calendar()
は非常に特殊な使い方をします。 もし日付が近ければ、"Today 9:00 AM"のような値が返されるでしょう。 もしそれが期待したものでないなら、あなたは.format()
関数を使うべきです。 ここでも、フォーマット指定子を渡したいかもしれません。 -
コメントでの質問に答えると、いいえ - あなたは
.local()
または.utc()
.
すべてをまとめる。
var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").valueOf();
var m = moment(ts);
var s = m.format("M/D/YYYY H:mm");
alert("Values are: ts = " + ts + ", s = " + s);
私のマシンでは、米国太平洋時間帯では、結果はこうなります。
値は、ts = 1413388800000, s = 10/15/2014 9:00 です。
入力された値はローカルタイムで解釈されますので
ts
には異なる値が返されます。
また、本当に秒単位で処理したい場合(精度が落ちる可能性があります)、momentにはそのためのメソッドも用意されていることに注意してください。 例えば
.unix()
を使ってタイムスタンプを秒単位で返します。
moment.unix(ts)
で解析し、瞬間に戻します。
var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").unix();
var m = moment.unix(ts);
関連
-
[解決済み] Pythonで日付をdatetimeに変換する
-
[解決済み] JavaScriptの日付をUTCに変換する方法を教えてください。
-
[解決済み】特定のタイムゾーンで日付をフォーマットする
-
[解決済み】UTCエポックをローカル日付に変換する
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] javascriptのキャンバスで画像をリサイズする (スムーズ)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JavaScriptで次の要素/前の要素を取得しますか?
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] チェックボックスが選択されているかどうかを確認するjQuery
-
[解決済み] なぜJavaScriptでは!{}[true]がtrueに評価されるのですか?
-
[解決済み] React js 親コンポーネントから子コンポーネントの状態を変更する
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] Promise : then vs then + catch [重複].
-
[解決済み] HTML要素にスクロールバーがあるかどうかをチェックする