mirror of
https://github.com/public-transport/db-vendo-client.git
synced 2025-02-23 07:09:35 +02:00
parent
8bfc4aee0f
commit
5d49fd0a20
2 changed files with 16 additions and 17 deletions
|
@ -1,6 +1,6 @@
|
|||
'use strict'
|
||||
|
||||
const {DateTime, IANAZone} = require('luxon')
|
||||
const {DateTime, FixedOffsetZone, IANAZone} = require('luxon')
|
||||
|
||||
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
|
||||
|
||||
let timezone
|
||||
if (timezones.has(profile)) timezone = timezones.get(profile)
|
||||
else {
|
||||
if (tzOffset !== null) {
|
||||
timezone = FixedOffsetZone.instance(tzOffset)
|
||||
} else if (timezones.has(profile)) {
|
||||
timezone = timezones.get(profile)
|
||||
} else {
|
||||
timezone = new IANAZone(profile.timezone)
|
||||
timezones.set(profile, timezone)
|
||||
}
|
||||
|
||||
if (tzOffset !== null) {
|
||||
// We don't know the timezone, but only the *timezone offset*, which is why we
|
||||
// can't use Luxon to process the offset.
|
||||
const isoOffset = ('0' + (tzOffset / 60 | 0)).slice(-2) + ('0' + (tzOffset % 60)).slice(-2)
|
||||
const isoStr = pDate.join('-') + 'T' + pTime.join(':') + '+' + isoOffset
|
||||
return timestamp ? +new Date(isoStr) : isoStr
|
||||
} 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
|
||||
|
|
|
@ -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, 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()
|
||||
})
|
||||
|
|
Loading…
Add table
Reference in a new issue