2016-05-09 13 views
0

私は、アプリケーションに日付と時刻を入力するようユーザーに求めています。ユーザーは自分のタイムゾーンに基づいて時刻を入力します。この日時をデータベースに保存すると、時刻をUTCに変換したいので、時間(UTCで行われます)でクエリを実行すると、エントリ。 日時をUTCに変換

この

は、私が現在やったです:

var date = new Date(); 
var dateString = "0" + (date.getMonth() + 1) + "/" + date.getDate() + "/" + date.getFullYear() + " " + time; 
//format date 
date = moment(dateString, "MM/DD/YYYY HH:mm a"); 
date = new Date(date).toISOString(); 

(私は午前11時、時間=午前11時のために何かをスケジュールする場合例)時間は、ユーザが入力した時間をある

これをデータベースに保存すると、 ISODate("2016-05-09T11:00:00Z")のようになります。これは、Zulu時間として保存されたESTであるため正しくありません。

時間を変換して(私は瞬間を使用しています)、正しいズールー時間としてどのように保存できますか?

+0

に変換します。どのように異なって見えますか? –

+0

@RegisPortalez toISOString()が何かを変更しているように見えません – erichardson30

答えて

0

1つのオプションは、Javascriptの組み込みUTC関数を使用することです。例えば

getUTCDate() - Returns the day of the month, according to universal time (from 1-31) 
getUTCDay() - Returns the day of the week, according to universal time (from 0-6) 
getUTCFullYear()- Returns the year, according to universal time 
getUTCHours() - Returns the hour, according to universal time (from 0-23) 
getUTCMilliseconds() - Returns the milliseconds, according to universal time (from 0-999) 
getUTCMinutes() - Returns the minutes, according to universal time (from 0-59) 
getUTCMonth() - Returns the month, according to universal time (from 0-11) 
getUTCSeconds() - Returns the seconds, according to universal time (from 0-59) 

JavaScript Date Reference

new Date('2016-05-09 10:00:00') 
    returns Mon May 09 2016 10:00:00 GMT-0400 

new Date('2016-05-09 10:00:00').getUTCHours() 
    returns 14 

UPDATE:例(.toISOString含む())

私たちは午前8時00分PM @ 2016年7月4日を選択した場合東部標準時(GMT-0400)、UTCは2016年7月5日@ 00:00(深夜):

var date = new Date('2016-07-04 20:00:00') 
date.getUTCFullYear = 2016 
date.getUTCMonth = 6 (0 base) 
date.getUTCDate = 5 
date.getUTCHours = 0 
date.getUTCMinutes = 0 

var date = new Date('2016-07-04 20:00:00') 
date.toISOString() = "2016-07-05T00:00:00.000Z" (UTC) 
+0

これは時間入力をUTC時刻に変換するのにはあまり役立ちません。これにより、現在の時刻をUTCで取得できます...しかしifユーザーは午前11時を入力します.UTC時間はUTCの現在時刻になります – erichardson30

+0

申し訳ありません。たぶん私はその質問を理解していませんでした。ユーザーが将来の日時を入力すると(スケジューリング処理を前提に)、その入力からDateオブジェクトを作成できます。たとえば、7月4日の午後8時は、「var date = new Date( '2016-07-04 20:00:00')」となります。これらの関数を使用すると、各UTCコンポーネントを取得して、UTCに基づいて新しいDateオブジェクトを作成できます。他のコメントと同様、.toISOString()は、有効なDateオブジェクトでも機能します。私は答えを例で更新します。 – WonderGrub

+0

私はちょうど文字列の入力を解析し、そこから日付を作成しています。ユーザーが午後8時に入力すると、午後8時に文字列が取得され、それをUTCに変換する必要があります – erichardson30

0

この問題を解決するために、私はmoment-timezoneライブラリを使用しました。

それが唯一のESTによってアクセスされますので、私は最初のサーバー上のタイムゾーンを設定します。

date = moment(dateString, "MM/DD/YYYY HH:mm a").tz("UTC"); 
:そして、私が行うために必要なすべてのことでUTCにモーメントオブジェクトのタイムゾーンを設定した

moment.tz.setDefault("America/New_York"); 

これは、あなたが手動でtoISOString()を呼び出すので、ESTからUTCへの時刻を

関連する問題