2017-02-08 2 views
1

私はFullcalendarを使用しており、dayClickではクリックした日に一致するイベントを検索しようとしています。moment.format()は翌日に戻ります

var events = $calendar.fullCalendar('clientEvents'); 
    if(events.length > 0) { 
     for (var i = 0; i < events.length; i++) { 
      if (date.format('YYYY-MM-DD') == events[i].start.format('YYYY-MM-DD')) { 

    ... 

date.format('YYYY-MM-DD') 

は、私がクリックした一日を返しますが、forループ、その日のイベントになったとき

events[i].start.format('YYYY-MM-DD') 

は、次の日を返します。これはUTCの影響を受けているようですが、これはイベントのあるすべての日に適用されます。今日だけではありません。私はさまざまなフォーマットを試しましたが、それでも同じです。ここに私が気づいたものがあります:

n 
_ambigTime:false 
_ambigZone:true 
_d:Thu Feb 09 2017 08:00:00 GMT-0500 (EST) 
_f:"YYYY-MM-DD HH:mm:ss" 
_fullCalendar:true 
_i:"2017-02-08 13:00:00" 
_isAMomentObject:true 
_isUTC:true 
_isValid:true 
_locale:f 

_dと_iは異なることに注意してください。 _iは実際には正しい日付/時刻です。だから私はそれをどのように参照できますか?

答えて

1

__dおよび_iなど)で始まるすべてのモーメントプロパティは内部使用のためのものであり、使用しないでください。

2つのモーメントオブジェクトが同じ日を表しているかどうかをチェックする場合は、isSameを使用して、書式設定された文字列を比較するのではなく、あなたのケースでは:

date.isSame(events[i].start, 'day') 

問題は、あなたのオブジェクトのいくつかはUTCモード(_isUTC: true)で作成されていることであるので、彼らは代わりに現地時間の(いくつかのケースでは、前の日)UTC時刻を使用して表示されます。 UTCモードhereについて

詳細情報:デフォルトでは

、現時点では現地時間で解析し、表示されます。

モーメントをUTCで解析または表示する場合は、moment()の代わりにmoment.utc()を使用できます。

これはMoment.jsの興味深い機能をもたらします。 UTCモード。

UTCモードでは、すべての表示方法が現地時間ではなくUTC時間で表示されます。

関連する問題