mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 15:19:35 +02:00
parent
8bfc4aee0f
commit
5d49fd0a20
2 changed files with 16 additions and 17 deletions
|
@ -1,6 +1,6 @@
|
||||||
'use strict'
|
'use strict'
|
||||||
|
|
||||||
const {DateTime, IANAZone} = require('luxon')
|
const {DateTime, FixedOffsetZone, IANAZone} = require('luxon')
|
||||||
|
|
||||||
const timezones = new WeakMap()
|
const timezones = new WeakMap()
|
||||||
|
|
||||||
|
@ -19,26 +19,21 @@ const parseDateTime = (profile, date, time, tzOffset = null, timestamp = false)
|
||||||
const daysOffset = time.length > 6 ? parseInt(time.slice(0, -6)) : 0
|
const daysOffset = time.length > 6 ? parseInt(time.slice(0, -6)) : 0
|
||||||
|
|
||||||
let timezone
|
let timezone
|
||||||
if (timezones.has(profile)) timezone = timezones.get(profile)
|
if (tzOffset !== null) {
|
||||||
else {
|
timezone = FixedOffsetZone.instance(tzOffset)
|
||||||
|
} else if (timezones.has(profile)) {
|
||||||
|
timezone = timezones.get(profile)
|
||||||
|
} else {
|
||||||
timezone = new IANAZone(profile.timezone)
|
timezone = new IANAZone(profile.timezone)
|
||||||
timezones.set(profile, timezone)
|
timezones.set(profile, timezone)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tzOffset !== null) {
|
let dt = DateTime.fromISO(pDate.join('-') + 'T' + pTime.join(':'), {
|
||||||
// We don't know the timezone, but only the *timezone offset*, which is why we
|
locale: profile.locale,
|
||||||
// can't use Luxon to process the offset.
|
zone: timezone
|
||||||
const isoOffset = ('0' + (tzOffset / 60 | 0)).slice(-2) + ('0' + (tzOffset % 60)).slice(-2)
|
})
|
||||||
const isoStr = pDate.join('-') + 'T' + pTime.join(':') + '+' + isoOffset
|
if (daysOffset > 0) dt = dt.plus({days: daysOffset})
|
||||||
return timestamp ? +new Date(isoStr) : isoStr
|
return timestamp ? dt.toMillis() : dt.toISO()
|
||||||
} else {
|
|
||||||
let dt = DateTime.fromISO(pDate.join('-') + 'T' + pTime.join(':'), {
|
|
||||||
locale: profile.locale,
|
|
||||||
zone: timezone
|
|
||||||
})
|
|
||||||
if (daysOffset > 0) dt = dt.plus({days: daysOffset})
|
|
||||||
return timestamp ? dt.toMillis() : dt.toISO()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = parseDateTime
|
module.exports = parseDateTime
|
||||||
|
|
|
@ -42,5 +42,9 @@ test('parseDateTime: works', (t) => {
|
||||||
assert(['20190318', '02131910', null, false], '2019-03-20T13:19:10.000+01:00')
|
assert(['20190318', '02131910', null, false], '2019-03-20T13:19:10.000+01:00')
|
||||||
assert(['20190318', '02131910', null, true], +new Date('2019-03-20T13:19:10.000+01:00'))
|
assert(['20190318', '02131910', null, true], +new Date('2019-03-20T13:19:10.000+01:00'))
|
||||||
|
|
||||||
|
// manual timezone offset day offset
|
||||||
|
assert(['20190318', '02131910', 150, false], '2019-03-20T13:19:10.000+02:30')
|
||||||
|
assert(['20190318', '02131910', 150, true], +new Date('2019-03-20T13:19:10.000+02:30'))
|
||||||
|
|
||||||
t.end()
|
t.end()
|
||||||
})
|
})
|
||||||
|
|
Loading…
Add table
Reference in a new issue