672
672
default :
673
673
range = tools . parseDateRange ( element . dateStart , element . dateEnd ) ;
674
674
675
- var year = range [ 0 ] . getFullYear ( ) ;
676
- var month = range [ 0 ] . getMonth ( ) ;
677
- var day = range [ 0 ] ;
675
+ var dateBefore = ktkGetNextDate ( range [ 0 ] , - 1 ) ;
676
+ var year = dateBefore . getFullYear ( ) ;
677
+ var month = dateBefore . getMonth ( ) ;
678
+ var day = dateBefore ;
678
679
679
680
for ( var i = 0 ; i < range . length ; i ++ ) {
680
681
var rday = range [ i ] ;
681
-
682
+
682
683
// Fill years
683
684
if ( rday . getFullYear ( ) !== year ) {
684
685
yearArr . push (
692
693
}
693
694
daysInYear ++ ;
694
695
695
-
696
696
// Fill months
697
697
if ( rday . getMonth ( ) !== month ) {
698
698
monthArr . push (
720
720
+ ' <div class="fn-label">' + settings . dow [ getDay ] + '</div></div>' ) ;
721
721
} //for
722
722
723
-
724
723
// Last year
725
724
yearArr . push (
726
725
'<div class="row header year" style="width: '
734
733
+ tools . getCellSize ( ) * daysInMonth + 'px"><div class="fn-label">'
735
734
+ settings . months [ month ]
736
735
+ '</div></div>' ) ;
737
-
736
+
738
737
var dataPanel = core . dataPanel ( element , range . length * tools . getCellSize ( ) ) ;
739
738
740
739
1525
1524
var end = new Date ( to ) ;
1526
1525
var ret = [ ] ;
1527
1526
var i = 0 ;
1528
- do {
1529
- ret [ i ] = new Date ( current . getTime ( ) ) ;
1530
- current . setHours ( current . getHours ( ) + scaleStep ) ;
1531
- current . setHours ( Math . floor ( ( current . getHours ( ) ) / scaleStep ) * scaleStep ) ;
1527
+ for ( ; ; ) {
1528
+ var dayStartTime = new Date ( current ) ;
1529
+ dayStartTime . setHours ( Math . floor ( ( current . getHours ( ) ) / scaleStep ) * scaleStep ) ;
1530
+
1531
+ if ( ret [ i ] && dayStartTime . getDay ( ) !== ret [ i ] . getDay ( ) ) {
1532
+ // If mark-cursor jumped to next day, make sure it starts at 0 hours
1533
+ dayStartTime . setHours ( 0 ) ;
1534
+ }
1535
+ ret [ i ] = dayStartTime ;
1536
+
1537
+ // Note that we use ">" because we want to include the end-time point.
1538
+ if ( current . getTime ( ) > to . getTime ( ) ) break ;
1532
1539
1540
+ /* BUG-2: current is moved backwards producing a dead-lock! (crashes chrome/IE/firefox)
1541
+ * SEE: https://github.com/taitems/jQuery.Gantt/issues/62
1533
1542
if (current.getDay() !== ret[i].getDay()) {
1534
- current . setHours ( 0 ) ;
1543
+ current.setHours(0);
1535
1544
}
1545
+ */
1546
+
1547
+ current = ktkGetNextDate ( current , scaleStep ) ;
1536
1548
1537
1549
i ++ ;
1538
- } while ( current . getTime ( ) <= to . getTime ( ) ) ;
1550
+ } ;
1551
+
1539
1552
return ret ;
1540
1553
} ,
1541
1554
1683
1696
}
1684
1697
1685
1698
switch ( settings . scale ) {
1699
+ //case "hours": this.headerRows = 5; this.scaleStep = 8; break;
1686
1700
case "hours" : this . headerRows = 5 ; this . scaleStep = 1 ; break ;
1687
1701
case "weeks" : this . headerRows = 3 ; this . scaleStep = 13 ; break ;
1688
1702
case "months" : this . headerRows = 2 ; this . scaleStep = 14 ; break ;
1707
1721
} ) ;
1708
1722
1709
1723
} ;
1710
- } ) ( jQuery ) ;
1724
+ } ) ( jQuery ) ;
1725
+
1726
+ function ktkGetNextDate ( currentDate , scaleStep ) {
1727
+ for ( var minIncrements = 1 ; ; minIncrements ++ ) {
1728
+ var nextDate = new Date ( currentDate ) ;
1729
+ nextDate . setHours ( currentDate . getHours ( ) + scaleStep * minIncrements ) ;
1730
+
1731
+ if ( nextDate . getTime ( ) != currentDate . getTime ( ) ) {
1732
+ return nextDate ;
1733
+ }
1734
+
1735
+ // If code reaches here, it's because current didn't really increment (invalid local time) because of daylight-saving adjustments
1736
+ // => retry adding 2, 3, 4 hours, and so on (until nextDate > current)
1737
+ }
1738
+ }
0 commit comments