2017-02-20 5 views
2

私はbs-datepickerをmongodbの番号として保存しています。 mongodbでは、時間の値を持つフィールド、つまり3870000041400000はそれぞれ16.1517.00です。モーメントで時間を数値にフォーマットする方法は?

ここで、上記の時刻を読み取り可能な形式でフォーマットします。私はmoment 2.16を使用しています。数にミリメートル:ここで私はHHから変換する方法、jsfiddle

console.log(moment.unix(38700000).format('HH:mm')) //03:30, expect:16:15 
console.log(moment.unix(41400000).format('HH:mm')) //09:30, expect:17:00 

を行うとしてみてくださいすることができませんでしたが。例:18:71数値に変換

+1

私が 'console.log(瞬間(380000).format( 'HH:mm'));'& 'console.log(瞬間(41400000).format( 'HH:mm'));' Iそれぞれ10:45と11:30の値を取得します。これらは両方ともあなたの目標値から5:30分離れているので、あなたのタイムゾーンが正しいことを確認します(おそらくUTC + 0を使用するのが最善です)。フォーマット引数として 'x'を渡して、日付からunixタイムスタンプを取得することができます。 –

+1

私は、そのmoment.unix(t)がunixタイムスタンプを秒単位で受け取るのに対し、moment(t)はunixタイムスタンプ(ミリ秒単位)を取ることを指摘したいと思います。 –

+0

@SamJudge、返信いただきありがとうございます。私のタイムゾーンは+5:30 GMTですので、どのように実装するのですか? – user7104874

答えて

2

データは、1970-01-01 00:00:00.000 UTCからのミリ秒で表示されます。

38700000 == 1970-01-01T10:45:00Z 
41400000 == 1970-01-01T11:30:00Z 

あなたはコメント(UTC + 05:30)に記載されたタイムゾーンオフセットにそれらを変換場合は、値の時間の部分は、あなたが期待したものをラインアップ。

38700000 == 1970-01-01T10:45:00Z == 1970-01-01T16:15:00+05:30 
41400000 == 1970-01-01T11:30:00Z == 1970-01-01T17:00:00+05:30 

あなたはミリ秒単位、秒単位で時間を見込んで一瞬のunix機能を、いない使用しているため(特に指定のない限りUnix Time全体秒であるため)あなたの値は、全く整列しません。

また、ローカルタイムゾーンを使用することにより、ユーザーが異なるタイムゾーンにある場合、期待値と異なる値を取得することがあります。

あなたが尋ねたものを得るための正しい方法は次のとおりです。

moment(38700000).utcOffset("+05:30").format("HH:mm") // "16:15" 
moment(41400000).utcOffset("+05:30").format("HH:mm") // "17:00" 

これはあなたの元のデータはUTCを参照して保存されていないことを意味していることけれども認識するが、UTC + 05を参照してください:30。あなたの代わりにUTCベースの値を格納していた場合、それが良いだろう、あなたはどうなる:もちろん

moment.utc(58500000).format("HH:mm") // "16:15" 
moment.utc(61200000).format("HH:mm") // "17:00" 

、ここでの本当の問題は、日付時刻に時刻を格納しているということですフィールド。おそらく最も良いことは、DateタイプをあなたのMongoDBデータに使用しないで、文字列"16:15"またはそれに相当する合計分数を整数(60 * 16 + 15 == 975)として保存することです。

+1

最後の段落は素晴らしい方法です素晴らしいです。 – user7104874

関連する問題