Search code examples
javascriptjquerytimetimepicker

How to add 2 hours for end time on previously "changed" start, using jQuery timepicker?


The jQuery Timepicker I use: http://timepicker.co/

What I want to achieve:

  • Two time input boxes: start time and end time.
  • Start Time: 8:00am.
  • End Time: When start time is changed and set to 8:00am, the end time should automatically be set to 10:00am.
$('#t1').timepicker({
    timeFormat : 'hh:mm a',
    interval : 30,
    minTime : '8',
    maxTime : '11:00 PM',
    startTime : '08:00 AM',
    dynamic : false,
    dropdown : true,
    scrollbar : true
});
$('#t1')
.timepicker('option', 'change', function(time) {
    $('#t2').timepicker('option', 'minTime', time);
    $('#t2').timepicker('setTime', time);
});
$('#t2').timepicker({
    timeFormat : 'hh:mm a',
    interval : 30,
    maxTime : '11:00 PM',
    startTime : '08:00 AM',
    dynamic : false,
    dropdown : true,
    scrollbar : true
});

Everything works well now except the unsettled way to add the 2 hours.


Solution

  • Use the Date object (time) passed to the #t1 change handler; add 2 hours to that time (in milliseconds, so 2 * 60 * 60 * 1000), and create a new Date() object. Set #t2 based on that.

    $('#t1')
      .timepicker('option', 'change', function(time) {
        var later = new Date(time.getTime() + (2 * 60 * 60 * 1000));
    
        $('#t2').timepicker('option', 'minTime', time);
        $('#t2').timepicker('setTime', later);
      });
    

    $('#t1').timepicker({
      timeFormat: 'hh:mm a',
      interval: 30,
      minTime: '8',
      maxTime: '11:00 PM',
      startTime: '08:00 AM',
      dynamic: false,
      dropdown: true,
      scrollbar: true
    });
    
    $('#t1')
      .timepicker('option', 'change', function(time) {
        var later = new Date(time.getTime() + (2 * 60 * 60 * 1000));
        $('#t2').timepicker('option', 'minTime', time);
        $('#t2').timepicker('setTime', later);
      });
    
    $('#t2').timepicker({
      timeFormat: 'hh:mm a',
      interval: 30,
      maxTime: '11:00 PM',
      startTime: '08:00 AM',
      dynamic: false,
      dropdown: true,
      scrollbar: true
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.js"></script>
    
    <link href="https://cdnjs.cloudflare.com/ajax/libs/timepicker/1.3.5/jquery.timepicker.min.css" rel="stylesheet" />
    
    <input type="text" id="t1" />
    <input type="text" id="t2" />