2016-11-23 8 views
0

著者は、選択ボックスを使用して、Pre-Set Dates/Timesから投稿をスケジュールすることができるようにします。javascriptを使って日付/時刻をあらかじめ設定する方法は?

著者は、1時間、明日8時、明日の昼食後、今夜、次の月曜日または次の月に投稿をスケジュールできるJavaScriptコードを使用します。 2016年11月31日に

問題は、例えば、現在の日付が、私は「明日午前8時」オプション日付変更を選択2016年11月30日、であればということである

ないように

12月1日、2016

問題は毎月末に発生します。

解決方法がわかりません。

お願いします。

JavaScriptのコードは次のとおりです。

(function ($) { 

    "use strict"; 

    $(function() { 

     // Get next coming weekday. 0 = Sunday, 1 = Monday... 
     Date.prototype.getNextWeekDay = function (d) { 
      if (d) { 
       var next = this; 
       next.setDate(this.getDate() - this.getDay() + 7 + d); 
       return next; 
      } 
     } 

     // Prepend leading zero if < 10. i.e 9 -> 09 
     function pad(n) { 
      return (n < 10) ? ("0" + n) : n; 
     } 

     // Add hours 
     Date.prototype.addHours= function(h){ 
      this.setHours(this.getHours()+h); 
      return this; 
     } 

     if($('#timestampdiv:visible').length == 0) { 

      // Setup fuzzy items 
      var fuzzy = [langstrings.inoneour, langstrings.tomorroweightam, langstrings.tomorrowafterlunch, langstrings.tonight, langstrings.nextmonday, langstrings.nextmonth, langstrings.reset]; 

      // Create new select box 
      $('<select class="fuzzy-later"><option value="">'+langstrings.postpone+'...</option></select>').insertBefore(".save-timestamp "); 

      // Add the fuzzy options 
      for (var i = 0; i < fuzzy.length; i++) { 
       $('.fuzzy-later').append('<option value="'+fuzzy[i]+'">'+fuzzy[i]+'</option>'); 
      } 

      // Update date and time when select box changes 
      $('.fuzzy-later').on('change', function(e) { 

       // Get current date 
       var now = new Date(); 

       e.preventDefault(); 

       var fuzzyChoice = $('.fuzzy-later').find(":selected").text(); 

       switch (fuzzyChoice) { 
        case langstrings.inoneour : 
         $('#jj').val(pad(now.getDate())); 
         $('#hh').val(now.addHours(1).getHours()); 
         $('#mn').val(now.addHours(1).getMinutes()); 
         $('#mm option').eq(now.getMonth()).prop('selected', true); 
         break; 
        case langstrings.tomorroweightam : 
         $('#jj').val(pad(parseInt(now.getDate())+1)); 
         $('#hh').val('08'); 
         $('#mn').val('00'); 
         $('#mm option').eq(now.getMonth()).prop('selected', true); 
         break; 
        case langstrings.tomorrowafterlunch : 
         $('#jj').val(pad(now.getDate()+1)); 
         $('#hh').val('13'); 
         $('#mn').val('00'); 
         $('#mm option').eq(now.getMonth()).prop('selected', true); 
         break; 
        case langstrings.tonight : 
         $('#jj').val(pad(now.getDate())); 
         $('#hh').val('22'); 
         $('#mn').val('00'); 
         $('#mm option').eq(now.getMonth()).prop('selected', true); 
         break; 
        case langstrings.nextmonday : 
         $('#jj').val(pad(now.getNextWeekDay(1).getDate())); 
         var nextmondaymonth = pad(now.getNextWeekDay(1).getMonth()); 
         $('#mm option').eq(nextmondaymonth).prop('selected', true); 
         break; 
        case langstrings.nextmonth : 
         var nextmonth = $('#mm').find(":selected").index() + 1; 
         $('#mm option').eq(nextmonth).prop('selected', true); 
         break; 
        case langstrings.reset :       
         $('.cancel-timestamp').trigger('click'); 
         $('#mm').prop('selectedIndex', 0); 
         break; 
       } 

      }); 

     } 

    }); 
}(jQuery)); 
+0

[*現在の日付に+1を追加](http://stackoverflow.com/questions/9989382/add-1-to-current-date/9989458#9989458)を参照してください。 – RobG

答えて

1

あなたは、単にDateオブジェクトから日付を引っ張り、月末に関して全くチェックして1を追加しています。 Dateオブジェクトは、これに対処するためのメソッドを提供します。 .getDate()メソッドはそのまま使用してください。ちょうど出力にダンプするのではなく、ちょうど+ 1の日付で.setDate()メソッドを使用してください。その後、そのままDateオブジェクトを使用することができます。

関連する問題