2016-06-20 6 views
-1

私は、日付をUTCの日付に変換するために使用するフィルタがあります。私は日付2016年6月18日日付の時差をUTCにする方法

を与えるとき

.filter('utc', function(){ 
    return function(val){ 
     var date = new Date(val); 
     return new Date(date.getUTCFullYear(), 
       date.getUTCMonth(), 
       date.getUTCDate(), 
       date.getUTCHours(), 
       date.getUTCMinutes(), 
       date.getUTCSeconds(),date.getTimezoneOffset()); 
    }; 
}) 

だからそれはこの土2016年6月18日00:00:00 GMT-0400のような日(東部夏時間)

ザ・を返します。日付は正しいものの、正しいタイムゾーンを反映していません。

私はあなたがこのためにDate.prototype.toISOString()を使用することができ、エンド

+0

なぜMomentJSとMomentJSタイムゾーンのようなものを使用しないのですか?あなたの人生を楽にするでしょう。 – Psyco430404

+0

可能[複製](http://stackoverflow.com/questions/948532/how-do-you-convert-a-javascript-date-to-utc) – kirinthos

+0

いいえ私はちょうどtの迅速な解決策を望む –

答えて

1

いくつかのことを返すように変更することができます。

  • Dateコンストラクタは、タイムゾーンオフセットを受け入れるパラメータを持っていません。 secondsに続くパラメータはmillisecondsです。 Refer to the MDN reference

  • ローカルベースの値が期待されるコンストラクタDateにUTCベースの値を渡すべきではありません。これを行うと、まったく異なる時点を追跡する効果があります。タイムゾーンのオフセットを調整していると思うかもしれませんが、そうではありません。

  • Dateオブジェクト常には、以下の動作を有する。

    • それは(Object.valueOfから継承).valueOf()によって返される、単一の値を追跡、または.getTime()によって。この値は、1970年1月1日の開始時に真夜中(UTC)(閏秒を無視)から経過したミリ秒数です。

    • 大部分の入出力機能は、ローカルタイムゾーン、つまりコードが実行されているコンピュータによって設定されたタイムゾーンで動作します。 UTCと連携機能は、典型的には、その名前に「"UTCを持っている。

    • を別のタイムゾーンを使用するDateオブジェクトを取得することはできません。そうでないと主張し、任意のソリューションは、エッジケースを考慮していない。特に、 、「エポックシフトは」単独で使用する場合、根本的に間違っている一般的なアプローチである。(現地時間パラメータにUTC値を渡すと、エポックシフトの一の実装である。)

  • あなたが探しているのであれば簡単な解決方法は、.toUTCString()または.toISOString()と考えてください。

    • 一部のブラウザではまた、ECMAScriptの国際化APIをサポートし、あなたがやらせることがあります。.toLocaleString(undefined, { timeZone: 'UTC'})
  • Moment.jsは問題のこれらの種類に対処するための非常に一般的なライブラリであり、そのギャップの多くを埋めDateオブジェクトが持っています。モーメントはエポックシフトを経由してその魔法の多くを行いますが、それは、パブリックAPIと新しいオブジェクトタイプ(momentオブジェクト)を経由して、これを隠すこと

    moment(input, inputFormat).utc().format(outputFormat) 
    
    • 注:ローカル・ツー・UTCは、次のように行われていますこれは、Dateオブジェクトだけでは得られない安全レイヤーを提供します。
  • あなたの質問では、val変数にあったものはすべてではありませんでした。これが数値か文字列か、その文字列の形式によっては、Dateオブジェクトの解析動作が大きく変わることがあります。

1

でZのように、それはUTCタイムゾーンに戻りたいです。

あなたの関数が

return new Date(date.getUTCFullYear(), 
       date.getUTCMonth(), 
       date.getUTCDate(), 
       date.getUTCHours(), 
       date.getUTCMinutes(), 
       date.getUTCSeconds(),date.getTimezoneOffset()).toISOString(); 
+0

しかし、文字列、私は日付オブジェクトが欲しい –