2
function(startDate, lastDate){


var midDate = newDate(startDate.getFullYear(),startDate.getMonth(),Math.ceil((lastDate.getDate() + startDate.getDate()) / 2));

var startDateOffset = startDate.getTimezoneOffset();
var lastDateOffset = lastDate.getTimezoneOffset();
var midDateOffset = midDate.getTimezoneOffset();

var finalDate = new Date();
if(startDateOffset == midDateOffset){

  if((lastDate.getDate() - midDate.getDate()) > 1){
    alert("loop");
  finalDate = this.getDaylightChangeDate(midDate, lastDate); 
  }
 }

開始日を10月20日、終了日を22日、中間日を10月20日としています。これは場所Brasiliaでのみ発生し、startDateOffsetとmidDateOffsetは出力として180です。これは、中間日が常に開始日と等しいため、コードを無限ループでスローします。中間日を計算するために、JavaScriptで他の方法を提案してください

4

1 に答える 1

0

コードに問題はありません。2012-10-20T00:00 と 2012-10-21T23:00 の間の中間日付2012-10-20T23:30 です。もちろん、入力日付が 2 日以上離れていない場合、コードは日付が異なることを期待できません。start と end に同じ日付を渡した場合はどうなるでしょうか?

これらの日付が異なるタイム ゾーンで記録されている場合は、常に UTC を使用して差を計算する必要があります。

于 2012-11-01T14:02:45.417 に答える