UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

66 lines 2.31 kB
import { isPlainObject } from '../utils.js'; import { parseCalendar } from './parse_calendar.js'; export function getTimeObject(value) { let time, precision, calendar, calendarmodel, timezone, before, after; if (isPlainObject(value)) { ({ time, precision, calendar, calendarmodel, timezone, before, after } = value); calendarmodel = calendarmodel || calendar; } else { time = value; } time = time // It could be a year passed as an integer .toString() // Drop milliseconds from ISO time strings as those aren't represented in Wikibase anyway // ex: '2019-04-01T00:00:00.000Z' -> '2019-04-01T00:00:00Z' .replace('.000Z', 'Z') .replace(/^\+/, ''); if (precision == null) precision = getPrecision(time); const timeStringBase = getTimeStringBase(time, precision); return getPrecisionTimeObject(timeStringBase, precision, calendarmodel, timezone, before, after); } function getTimeStringBase(time, precision) { if (precision > 10) return time; if (precision === 10) { if (time.match(/^-?\d+-\d+$/)) return time + '-00'; else return time; } // From the year (9) to the billion years (0) // See https://www.wikidata.org/wiki/Help:Dates#Precision const yearMatch = time.match(/^(-?\d+)/); if (yearMatch == null) throw new Error(`couldn't identify year: ${time}`); const year = yearMatch[0]; return year + '-00-00'; } // Guess precision from time string // 2018 (year): 9 // 2018-03 (month): 10 // 2018-03-03 (day): 11 function getPrecision(time) { const unsignedTime = time.replace(/^-/, ''); return unsignedTime.split('-').length + 8; } function getPrecisionTimeObject(time, precision, calendarmodel, timezone = 0, before = 0, after = 0) { const sign = time[0]; // The Wikidata API expects signed years // Default to a positive year sign if (sign !== '-' && sign !== '+') time = `+${time}`; if (precision <= 11 && !time.match('T')) time += 'T00:00:00Z'; return { time, timezone, before, after, precision, calendarmodel: parseCalendar(calendarmodel, time), }; } //# sourceMappingURL=get_time_object.js.map