2017-04-30 11 views
0

私はトレーニングのために平均売り上げのオークションサイトを構築しています。私は事を理解することにほとんど問題がありません。フロントエンドでは、今日の日付と決算日の差(「30日」など)を表示します。これは、 "2017-04-30T22:10:52.360Z" 。オークション終了日平均売り上げ

  $scope.days =function (date) { 
      var today = new Date(); 
      var dd = today.getDate(); 
      var mm = today.getMonth() + 1; //January is 0! 
      var yyyy = today.getFullYear(); 
      if (dd < 10) { 
      dd = '0' + dd 
      } 
      if (mm < 10) { 
      mm = '0' + mm 
       } 
      today = yyyy + '/' + mm + '/' + dd; 
      $scope.today = today; 
      var date2 = new Date(today); 
      var date1 = new Date(date); 
      var timeDiff =(date1.getTime() - date2.getTime()); 
      $scope.dayDifference =((timeDiff/(1000 * 3600 * 24))-1); 
      return $scope.dayDifference; 
       } 
      }); 

は、明らかに私は、HTMLファイル内の他の日付を渡す 私の質問は次のとおりです:この機能で)「残りの私は、このような何かを行う場合、オークションは、世界の異なる時間に閉じて、今日の日付を引き起こします 私は知っている、momentjsしかし、このバグを修正するためにフロントエンドでこの機能を変更する方法が存在するかどうか疑問に思っていました。何かが好きです:もし私がUSAからサイトに参加すると、その日付は(サーバーの)私のタイムゾーンに変換されます

+0

* date *の形式は何ですか?タイムゾーン付きのISO 8601文字列の場合(例: "2017-04-30T22:10:52.360Z"とすると、IE 8以降のすべてのブラウザで組み込みのDateコンストラクタを使用して、それを "ローカル"の日付に変換することができます。他の形式の場合は、もう少し作業が必要ですが、それほど多くはありません。 – RobG

+0

'today = *を日付から文字列に変更したので、' var date2 = new Date(today) 'は無効なDateを返すことがあります。 – RobG

+0

こんにちは@RobG。あなたが言ったように、日付はISO形式です。 – mpeg90

答えて

1

日付文字列が "2017-04-30T22:10:52.360Z"のようなISO 8601拡張フォーマットの場合、IE 8より新しいブラウザでは内蔵パーサーで解析できます。また、デフォルトでは、Dateメソッドはホストのタイムゾーンオフセットを調整し、残りの日数を取得してISO文字列を解析し、ユーザーの現在の日付との差分をミリ秒単位で取得してから日数に変換します。

/* Return the difference in days between supplied string date 
 
** and host current date 
 
** @param {string} s - Date string in ISO 8601 format, e.g. 2017-04-05T23:00:00Z 
 
** @returns {number/string} if s is a valid date string, returns days between current host date and supplied date 
 
**       if s is an invalid date string, returns "Invalid date string" 
 
*/ 
 
function daysRemaining(isoString) { 
 
    var d = new Date(isoString); 
 
    if (isNaN(d)) return 'Invalid date string'; 
 
    return (d - new Date())/8.64e7; 
 
} 
 

 
var s = '2017-05-30T22:10:52.360Z'; 
 

 
console.log('Days remaining: ' + daysRemaining(s).toFixed(2));

日付文字列を正確にISO 8601形式でない場合は、一部のブラウザでは、それを解析し、他の多くないかもしれません。また、上記のISOフォーマットではない場合、UTCとローカルのどちらかとして扱う場合もありますので、注意してください。

日中に丸めたり、日、時間、分に変換することができます。

IE 8以前のバージョンでは、ISO形式の日付文字列は解析されず、他のブラウザの古いバージョンも解析されません。

関連する問題