2016-10-12 2 views
1

比較する必要がある2つの瞬間をオフセット:Moment.js .isBefore比較する日付がある

  1. 今日今ある時間帯に(水曜日2016年10月12日8時42分19秒GMT + 0000)
  2. カレンダー(例えば2016年10月11日)から選択した日付がここ

    が、私はそれを働いている方法です:

var date = '2016/10/12'; // october 11     
 
var offset = '0'; // time zone offset in minutes, 0 = GMT 
 
var dateToday = moment().utcOffset(offset); // get a moment now with the time zone offset 
 
var selectedDate = moment(date, ["YYYY-MM-DD"]).utcOffset(offset); // and a moment that is the date of the day selected 
 

 
alert(dateToday); 
 
alert(selectedDate); 
 

 
if (selectedDate.isBefore(dateToday, 'day')) {         
 
    alert('That date is in the past!'); 
 
} else { 
 
    alert('Great!'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://momentjs.com/downloads/moment.js"></script>

問題は、私はパリ時間でだからということであるように思われる

(02:00)いずれかが、私はパリ時間(02:00)の下に選択するようにオフセットたとえばGMTを(+00:00)その後、過去の選択日-1日を午後10時に設定します。

私の質問は、過去の日付(2016-10-12 GMT)が正しいかどうかを正しく確認する方法です。

UPDATE:

私は、フォーマット機能を使用して、関係なく、タイムゾーンの日付を抽出することで、今のところ、それを解決しました。そして、私はこのようなそれらの瞬間に明示的に日付文字列を渡す真新しい瞬間を作成しました:

var dateToday = moment().utcOffset(offset);  // get a moment now with the time zone offset 
 
var selectedDate = moment(date, ['YYYY-MM-DD']); // and a moment that is the date of the day selected 
 

 
var dateToday = dateToday.format('YYYY-MM-DD'); 
 
var selectedDate = selectedDate.format('YYYY-MM-DD'); 
 

 
var dateToday = moment(dateToday, ['YYYY-MM-DD']); 
 
var selectedDate = moment(selectedDate, ['YYYY-MM-DD']);

+1

モーメントは、デフォルトでローカルタイムゾーンの日付を解析します。私はあなたのコードからオフセット部分を削除するだけですべてが正常に動作すると思います。それ以外の場合は、['moment.utc()'](http://momentjs.com/docs/#/parsing/)を使用してUTCで文字列を比較することができます。複数のタイムゾーンを使用する必要がある場合は、[moment timezone](http://momentjs.com/timezone/) – VincenzoC

+0

を使用することができます。-XX:00 GMTのタイムゾーンを選択すると問題が発生します。過去には、今はPacific/Pago_Pagoで11位になっているかもしれませんが、スクリプトはGMT第12日の日付を検証しています。私はそれを説明する必要があります。 time-zone.jsでタイムゾーンのリストをアップロードする必要があるので、PHPからのリスト(オフセット付き)をすでに持っている場合は、それが工夫されたソリューションだと思っています。とにかくありがとう! –

答えて

1

何selectedDateの時間と分00:00設定したり、それにオフセットを割り当てることについてはどうですか?

var date = new Date(); 
var offset = date.getTimezoneOffset() * (-1) 
selectedDate.add(offset, "hours"); 
+0

それを解決した、おそらく最高の解決策ではないが、それは '瞬間'のために動作します。誰かが解決策に興味があるなら、OPの編集をチェックアウトしてください。 –