db-vendo-client/parse/date-time.js

36 lines
982 B
JavaScript
Raw Normal View History

2017-11-11 22:35:41 +01:00
'use strict'
2018-09-22 19:22:27 +02:00
const {DateTime, IANAZone} = require('luxon')
const timezones = new WeakMap()
2017-11-11 22:35:41 +01:00
2018-09-24 15:40:00 +02:00
// todo: change to `(profile) => (date, time) => {}`
const parseDateTime = (profile, date, time) => {
const pDate = [date.substr(-8, 4), date.substr(-4, 2), date.substr(-2, 2)]
if (!pDate[0] || !pDate[1] || !pDate[2]) {
throw new Error('invalid date format: ' + date)
}
const pTime = [time.substr(-6, 2), time.substr(-4, 2), time.substr(-2, 2)]
if (!pTime[0] || !pTime[1] || !pTime[2]) {
throw new Error('invalid time format: ' + time)
2017-11-11 22:35:41 +01:00
}
const offset = time.length > 6 ? parseInt(time.slice(0, -6)) : 0
2018-09-22 19:22:27 +02:00
let timezone
if (timezones.has(profile)) timezone = timezones.get(profile)
else {
timezone = new IANAZone(profile.timezone)
timezones.set(profile, timezone)
}
const dt = DateTime.fromISO(pDate.join('-') + 'T' + pTime.join(':'), {
locale: profile.locale,
2018-09-22 19:22:27 +02:00
zone: timezone
})
return offset > 0 ? dt.plus({days: offset}) : dt
2017-11-11 22:35:41 +01:00
}
module.exports = parseDateTime