@@ -13,10 +13,7 @@ var Lib = require('../../lib');
13
13
var ms2DateTime = Lib . ms2DateTime ;
14
14
var dateTime2ms = Lib . dateTime2ms ;
15
15
var incrementMonth = Lib . incrementMonth ;
16
- var constants = require ( '../../constants/numerical' ) ;
17
- var ONEDAY = constants . ONEDAY ;
18
- var ONEAVGMONTH = constants . ONEAVGMONTH ;
19
- var ONEAVGYEAR = constants . ONEAVGYEAR ;
16
+ var ONEDAY = require ( '../../constants/numerical' ) . ONEDAY ;
20
17
21
18
module . exports = function alignPeriod ( trace , ax , axLetter , vals ) {
22
19
if ( ax . type !== 'date' ) return vals ;
@@ -25,84 +22,67 @@ module.exports = function alignPeriod(trace, ax, axLetter, vals) {
25
22
if ( ! alignment ) return vals ;
26
23
27
24
var period = trace [ axLetter + 'period' ] ;
28
- var mPeriod ;
25
+ var mPeriod , dPeriod ;
29
26
if ( isNumeric ( period ) ) {
30
- period = + period ;
31
- if ( period <= 0 ) return vals ;
27
+ dPeriod = + period ;
28
+ dPeriod /= ONEDAY ; // convert milliseconds to days
29
+ dPeriod = Math . round ( dPeriod ) ;
30
+ if ( dPeriod <= 0 ) return vals ;
32
31
} else if ( typeof period === 'string' && period . charAt ( 0 ) === 'M' ) {
33
32
var n = + ( period . substring ( 1 ) ) ;
34
33
if ( n > 0 && Math . round ( n ) === n ) {
35
34
mPeriod = n ;
36
- period = n * ONEAVGMONTH ;
37
35
} else return vals ;
38
36
}
39
37
40
- if ( period > 0 ) {
41
- var calendar = ax . calendar ;
42
-
43
- var isStart = 'start' === alignment ;
44
- // var isMiddle = 'middle' === alignment;
45
- var isEnd = 'end' === alignment ;
46
-
47
- var period0 = trace [ axLetter + 'period0' ] ;
48
- var base = dateTime2ms ( period0 , calendar ) || 0 ;
49
-
50
- var newVals = [ ] ;
51
- var len = vals . length ;
52
- for ( var i = 0 ; i < len ; i ++ ) {
53
- var v = vals [ i ] - base ;
54
-
55
- var dateStr = ms2DateTime ( v , 0 , calendar ) ;
56
- var d = new Date ( dateStr ) ;
57
- var year = d . getUTCFullYear ( ) ;
58
- var month = d . getUTCMonth ( ) ;
59
- var day = d . getUTCDate ( ) ;
60
-
61
- var newD ;
62
- var startTime ;
63
- var endTime ;
64
-
65
- var nMonths = Math . floor ( period / ONEAVGMONTH ) % 12 ;
66
- var nYears = Math . floor ( ( period - nMonths * ONEAVGMONTH ) / ONEAVGYEAR ) ;
67
- var nDays = Math . floor ( ( period - nMonths * ONEAVGMONTH - nYears * ONEAVGYEAR ) / ONEDAY ) ;
68
- if ( nYears && nMonths ) nDays = 0 ;
69
-
70
- var y1 = year + nYears ;
71
- var m1 = month + nMonths ;
72
- var d1 = day + nDays ;
73
- if ( nDays || nMonths || nYears ) {
74
- if ( nDays ) {
75
- startTime = Date . UTC ( year , month , day ) ;
76
- var monthDays = new Date ( y1 , m1 + 1 , 0 ) . getUTCDate ( ) ;
77
- if ( d1 > monthDays ) {
78
- d1 -= monthDays ;
79
- m1 += 1 ;
80
- if ( m1 > 11 ) {
81
- m1 -= 12 ;
82
- y1 += 1 ;
83
- }
84
- }
85
- endTime = Date . UTC ( y1 , m1 , d1 ) ;
86
- } else if ( nMonths ) {
87
- startTime = Date . UTC ( year , nYears ? month : roundMonth ( month , nMonths ) ) ;
88
- endTime = incrementMonth ( startTime , mPeriod ? mPeriod : nMonths , calendar ) ;
89
- } else {
90
- startTime = Date . UTC ( year , 0 ) ;
91
- endTime = Date . UTC ( y1 , 0 ) ;
92
- }
93
-
94
- newD = new Date (
95
- isStart ? startTime :
96
- isEnd ? endTime :
97
- ( startTime + endTime ) / 2
98
- ) ;
99
- }
38
+ var calendar = ax . calendar ;
39
+
40
+ var isStart = 'start' === alignment ;
41
+ // var isMiddle = 'middle' === alignment;
42
+ var isEnd = 'end' === alignment ;
43
+
44
+ var period0 = trace [ axLetter + 'period0' ] ;
45
+ var base = dateTime2ms ( period0 , calendar ) || 0 ;
100
46
101
- newVals [ i ] = newD ? newD . getTime ( ) + base : vals [ i ] ;
47
+ var newVals = [ ] ;
48
+ var len = vals . length ;
49
+ for ( var i = 0 ; i < len ; i ++ ) {
50
+ var v = vals [ i ] - base ;
51
+
52
+ var dateStr = ms2DateTime ( v , 0 , calendar ) ;
53
+ var d = new Date ( dateStr ) ;
54
+ var year = d . getUTCFullYear ( ) ;
55
+ var month = d . getUTCMonth ( ) ;
56
+ var day = d . getUTCDate ( ) ;
57
+
58
+ var startTime , endTime ;
59
+ if ( dPeriod ) {
60
+ startTime = Date . UTC ( year , month , day ) ;
61
+ endTime = startTime + dPeriod * ONEDAY ;
102
62
}
103
- return newVals ;
63
+
64
+ if ( mPeriod ) {
65
+ var nYears = Math . floor ( mPeriod / 12 ) ;
66
+ var nMonths = mPeriod % 12 ;
67
+
68
+ if ( nMonths ) {
69
+ startTime = Date . UTC ( year , nYears ? month : roundMonth ( month , nMonths ) ) ;
70
+ endTime = incrementMonth ( startTime , mPeriod , calendar ) ;
71
+ } else {
72
+ startTime = Date . UTC ( year , 0 ) ;
73
+ endTime = Date . UTC ( year + nYears , 0 ) ;
74
+ }
75
+ }
76
+
77
+ var newD = new Date (
78
+ isStart ? startTime :
79
+ isEnd ? endTime :
80
+ ( startTime + endTime ) / 2
81
+ ) ;
82
+
83
+ newVals [ i ] = newD . getTime ( ) + base ;
104
84
}
105
- return vals ;
85
+ return newVals ;
106
86
} ;
107
87
108
88
var monthSteps = [ 2 , 3 , 4 , 6 ] ;
0 commit comments