Skip to content

Commit 43ebcfb

Browse files
noinklingbrianc
authored andcommitted
Fix input preparation for date objects with a BC year (#1864)
* test: BC date input preparation * Fix input preparation for BC dates
1 parent 4d84909 commit 43ebcfb

File tree

2 files changed

+38
-4
lines changed

2 files changed

+38
-4
lines changed

Diff for: lib/utils.js

+17-4
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,12 @@ function pad (number, digits) {
9797

9898
function dateToString (date) {
9999
var offset = -date.getTimezoneOffset()
100-
var ret = pad(date.getFullYear(), 4) + '-' +
100+
101+
var year = date.getFullYear()
102+
var isBCYear = year < 1
103+
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
104+
105+
var ret = pad(year, 4) + '-' +
101106
pad(date.getMonth() + 1, 2) + '-' +
102107
pad(date.getDate(), 2) + 'T' +
103108
pad(date.getHours(), 2) + ':' +
@@ -110,19 +115,27 @@ function dateToString (date) {
110115
offset *= -1
111116
} else { ret += '+' }
112117

113-
return ret + pad(Math.floor(offset / 60), 2) + ':' + pad(offset % 60, 2)
118+
ret += pad(Math.floor(offset / 60), 2) + ':' + pad(offset % 60, 2)
119+
if (isBCYear) ret += ' BC'
120+
return ret
114121
}
115122

116123
function dateToStringUTC (date) {
117-
var ret = pad(date.getUTCFullYear(), 4) + '-' +
124+
var year = date.getUTCFullYear()
125+
var isBCYear = year < 1
126+
if (isBCYear) year = Math.abs(year) + 1 // negative years are 1 off their BC representation
127+
128+
var ret = pad(year, 4) + '-' +
118129
pad(date.getUTCMonth() + 1, 2) + '-' +
119130
pad(date.getUTCDate(), 2) + 'T' +
120131
pad(date.getUTCHours(), 2) + ':' +
121132
pad(date.getUTCMinutes(), 2) + ':' +
122133
pad(date.getUTCSeconds(), 2) + '.' +
123134
pad(date.getUTCMilliseconds(), 3)
124135

125-
return ret + '+00:00'
136+
ret += '+00:00'
137+
if (isBCYear) ret += ' BC'
138+
return ret
126139
}
127140

128141
function normalizeQueryConfig (config, values, callback) {

Diff for: test/unit/utils-tests.js

+21
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,27 @@ test('prepareValues: date prepared properly as UTC', function () {
8181
defaults.parseInputDatesAsUTC = false
8282
})
8383

84+
test('prepareValues: BC date prepared properly', function () {
85+
helper.setTimezoneOffset(-330)
86+
87+
var date = new Date(-3245, 1, 1, 11, 11, 1, 7)
88+
var out = utils.prepareValue(date)
89+
assert.strictEqual(out, '3246-02-01T11:11:01.007+05:30 BC')
90+
91+
helper.resetTimezoneOffset()
92+
})
93+
94+
test('prepareValues: 1 BC date prepared properly', function () {
95+
helper.setTimezoneOffset(-330)
96+
97+
// can't use the multi-argument constructor as year 0 would be interpreted as 1900
98+
var date = new Date('0000-02-01T11:11:01.007')
99+
var out = utils.prepareValue(date)
100+
assert.strictEqual(out, '0001-02-01T11:11:01.007+05:30 BC')
101+
102+
helper.resetTimezoneOffset()
103+
})
104+
84105
test('prepareValues: undefined prepared properly', function () {
85106
var out = utils.prepareValue(void 0)
86107
assert.strictEqual(out, null)

0 commit comments

Comments
 (0)