2017-04-07 5 views
0

現在、FullCalendarを使用していますが、現在の時刻を選択コールバック関数のあいまいな日付の瞬間に追加する必要があります。momentjsを使用して現在の時刻をあいまいな日付に追加する

月ビューで曜日を選択すると、コールバック関数のパラメータ "start"と "end"はあいまいな日付(時間なし)の瞬間を返します。あなたが見ることができるように私は私がよ、...

if(!start.hasTime()){ 
    start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss'))); 
} 

を戻した瞬間にそれを変換するが、これはそれを行うための適切な方法であるかどうか疑問の日付に現在の時刻を追加するには、以下を使用しています「開始」および「終了」の日付および現在の時刻を文字列に変換し、連結された文字列を瞬時に変換する。

作成している瞬間が有効なISO 8601形式であることを確認します。

ありがとう、 助けていただければ幸いです。

答えて

1

official docsでは、format()関数を呼び出すと、ISO 8601形式の日付が得られます。これをチェック :jsfiddle

をさらに、あなたはタイムゾーンを処理したいいけない場合、私はV3.40をfullcalendarにアップグレードするとき、あなたは不思議な、私は同じ問題を持っていたutc()method

0

を使用することができます。 fullcalendar docsによれば、format()toISOStringの関数は、日付が返されるためのあいまいなタイミングの瞬間、すなわち '2017-03-06'のためにfullcalendar内でオーバーライドされています。これを克服して時間を設定するには、あなたがしたことである新しいモーメントオブジェクトを作成する必要があります。ただし、ブラウザ間で一貫性のある構文解析を行うには、解析する形式をmoment docsとして指定する必要があります。だからあなたのシナリオのために、それは次のようになります。

if(!start.hasTime()){ 
     var format = 'YYYY-MM-DD HH:mm:ss'; 
     start = moment(start.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
     end = moment( end.format('YYYY-MM-DD'+' '+ moment().format('HH:mm:ss')), format); 
    } 

コードクリーナーと読みやすいを作るために、しかし、あなたはUNIXタイムスタンプを使用して新しい瞬間を作成することができます(数で、文字列形式に依存しません) startの瞬間を設定し、瞬間を使って時刻を設定するset機能。だから、今、このようになります。

if(!start.hasTime()){ 
     var timestamp = start.valueOf(); 
     var now = moment(); 
     var startMomentWithNowTime = moment(timestamp).set({ 
      'hour': now.hour(), 
      'minute': now.minute(), 
      'second': now.second() 
     }); 
     start = startMomentWithNowTime; 
     end = startMomentWithNowTime; 
    } 

startMomentWithNowTime命名記述変数すみません。いくつかの行が、うまくいけば読むのが簡単です。オンデマンドで使用する関数にこのロジックをラップすることもできます。それが役に立てば幸い!

関連する問題