0

私の Java スクリプト アプリケーションは、.net Web サービスを使用してバックエンドからデータを取得します。日付/時刻の変換を除いて、すべて正常に機能します。サービスから返されたエポック日付をユーザーのローカル ブラウザーの日付に変換する必要があります。

Web サービスは、以下の形式で日付を返します。

/Date(1335341422660-0500)/ 

これは、これを人間が読める日付に変換するために行ったことです。

ハイフン (-) の後のすべてを取り除き、残りのデータを日付変換に使用します

var dateVal=dateField.replace(/-.*\)/g,')');                           
var date = new Date(parseFloat(dateVal.substr(6)));


   var dateArray=date.toString().split(" ");
   if(dateArray.length>3){
  timeZone=("("+dateArray[4])+")"
    }

 var month=date.getMonth() + 1;
 var year=date.getFullYear();
 var date=date.getDate();
 var hours= date.getHours();
 var offset=date.getTimezoneOffset();
 var finalDateStr=(year+"-"+month+"-"+dateValue)+" "+hours+":"+
                            minutes+":"+seconds+" "+timeZone;

上記のエポック値の場合、予想される日付は、

4/24/2012 9:10:22 PM - この日付は、新しいアイテムが作成/更新されるたびに、この日付を MS SQL サーバーに挿入するソース アプリケーションである .net アプリケーションに表示されます。SQL サーバーの日付を (.net を使用して) ローカルの日付に変換し、UI に表示します。

しかし、上記のスクリプトを使用して日付を作成すると、次のように値が取得されます。

2012-4-25 4:10:22 (EDT) (上記の日付と比較して 7 時間以上)。

どこが間違っているのかわかりません..誰かがこの問題を理解するのを手伝ってくれますか?

4

2 に答える 2

0

これがこの問題を解決する素晴らしい方法かどうかはわかりません...

これは私がやったことであり、うまくいくようです...繰り返しますが、これは絶対確実な解決策だとは思いませんが、さまざまなタイムゾーン(夏時間の有無にかかわらず)でチェックしたところ、うまくいくようです......

 var dateVal=dateField.replace(/-.*\)/g,')');                           
                            var date = new Date(parseFloat(dateVal.substr(6)));

                            var dateArray=date.toString().split(" ");
                            var timeZone="(Local Time)";
                            if(dateArray.length>3){
                                timeZone=("("+dateArray[4])+")"
                            }
var date2=dateField.split("-");
                     var dateOffset=(date2[1].toString().replace(")","").replace("/",""));

if( date.toString().toUpperCase().indexOf("DT")!==-1){                        
 date.setHours(date.getHours()-(parseFloat(parseFloat(dateOffset).toString().replace(/0*$/, ''))+2));
}else{
 date.setHours(date.getHours()-(parseFloat(parseFloat(dateOffset).toString().replace(/0*$/, ''))+1));
}


                            var month=date.getMonth() + 1;
                            var year=date.getFullYear();
                            var dateValue=date.getDate();
                            var hours= date.getHours();                              
                            var minutes= date.getMinutes();
                            var seconds=date.getSeconds()
                            var finalDateStr=(year+"-"+month+"-"+dateValue)+" "+hours+":"+
                            minutes+":"+seconds+" "+timeZone;
于 2013-01-28T23:10:00.390 に答える
0

このような日付操作には、Moment.jsの使用を検討することをお勧めします。

于 2013-01-28T19:55:41.220 に答える