%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
| Server IP : 14.207.165.8 / Your IP : 216.73.216.26 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /proc/thread-self/root/var/www/html/ppaobm/vendor/bower-asset/fullcalendar/src/core/datelib/ |
Upload File : |
import {
DateMarker, addMs,
diffHours, diffMinutes, diffSeconds, diffWholeWeeks, diffWholeDays,
startOfDay, startOfHour, startOfMinute, startOfSecond,
weekOfYear, arrayToUtcDate, dateToUtcArray, dateToLocalArray, arrayToLocalDate, timeAsMs, isValidDate
} from './marker'
import { CalendarSystem, createCalendarSystem } from './calendar-system'
import { Locale } from './locale'
import { NamedTimeZoneImpl, NamedTimeZoneImplClass } from './timezone'
import { Duration, asRoughYears, asRoughMonths, asRoughDays, asRoughMs } from './duration'
import { DateFormatter, buildIsoString } from './formatting'
import { parse } from './parsing'
import { isInt } from '../util/misc'
import { CmdFormatterFunc } from './formatting-cmd'
export interface DateEnvSettings {
timeZone: string
namedTimeZoneImpl?: NamedTimeZoneImplClass
calendarSystem: string
locale: Locale
weekNumberCalculation?: any
firstDay?: any,
weekLabel?: string,
cmdFormatter?: CmdFormatterFunc
}
export type DateInput = Date | string | number | number[]
export interface DateMarkerMeta {
marker: DateMarker
isTimeUnspecified: boolean
forcedTzo: number | null
}
export class DateEnv {
timeZone: string
namedTimeZoneImpl: NamedTimeZoneImpl
canComputeOffset: boolean
calendarSystem: CalendarSystem
locale: Locale
weekDow: number // which day begins the week
weekDoy: number // which day must be within the year, for computing the first week number
weekNumberFunc: any
weekLabel: string // DON'T LIKE how options are confused with local
cmdFormatter?: CmdFormatterFunc
constructor(settings: DateEnvSettings) {
let timeZone = this.timeZone = settings.timeZone
let isNamedTimeZone = timeZone !== 'local' && timeZone !== 'UTC'
if (settings.namedTimeZoneImpl && isNamedTimeZone) {
this.namedTimeZoneImpl = new settings.namedTimeZoneImpl(timeZone)
}
this.canComputeOffset = Boolean(!isNamedTimeZone || this.namedTimeZoneImpl)
this.calendarSystem = createCalendarSystem(settings.calendarSystem)
this.locale = settings.locale
this.weekDow = settings.locale.week.dow
this.weekDoy = settings.locale.week.doy
if (settings.weekNumberCalculation === 'ISO') {
this.weekDow = 1
this.weekDoy = 4
} else if (typeof settings.firstDay === 'number') {
this.weekDow = settings.firstDay
}
if (typeof settings.weekNumberCalculation === 'function') {
this.weekNumberFunc = settings.weekNumberCalculation
}
this.weekLabel = settings.weekLabel != null ? settings.weekLabel : settings.locale.options.weekLabel
this.cmdFormatter = settings.cmdFormatter
}
// Creating / Parsing
createMarker(input: DateInput): DateMarker {
let meta = this.createMarkerMeta(input)
if (meta === null) {
return null
}
return meta.marker
}
createNowMarker(): DateMarker {
if (this.canComputeOffset) {
return this.timestampToMarker(new Date().valueOf())
} else {
// if we can't compute the current date val for a timezone,
// better to give the current local date vals than UTC
return arrayToUtcDate(dateToLocalArray(new Date()))
}
}
createMarkerMeta(input: DateInput): DateMarkerMeta {
if (typeof input === 'string') {
return this.parse(input)
}
let marker = null
if (typeof input === 'number') {
marker = this.timestampToMarker(input)
} else if (input instanceof Date) {
input = input.valueOf()
if (!isNaN(input)) {
marker = this.timestampToMarker(input)
}
} else if (Array.isArray(input)) {
marker = arrayToUtcDate(input)
}
if (marker === null || !isValidDate(marker)) {
return null
}
return { marker, isTimeUnspecified: false, forcedTzo: null }
}
parse(s: string) {
let parts = parse(s)
if (parts === null) {
return null
}
let marker = parts.marker
let forcedTzo = null
if (parts.timeZoneOffset !== null) {
if (this.canComputeOffset) {
marker = this.timestampToMarker(marker.valueOf() - parts.timeZoneOffset * 60 * 1000)
} else {
forcedTzo = parts.timeZoneOffset
}
}
return { marker, isTimeUnspecified: parts.isTimeUnspecified, forcedTzo }
}
// Accessors
getYear(marker: DateMarker): number {
return this.calendarSystem.getMarkerYear(marker)
}
getMonth(marker: DateMarker): number {
return this.calendarSystem.getMarkerMonth(marker)
}
// Adding / Subtracting
add(marker: DateMarker, dur: Duration): DateMarker {
let a = this.calendarSystem.markerToArray(marker)
a[0] += dur.years
a[1] += dur.months
a[2] += dur.days
a[6] += dur.milliseconds
return this.calendarSystem.arrayToMarker(a)
}
subtract(marker: DateMarker, dur: Duration): DateMarker {
let a = this.calendarSystem.markerToArray(marker)
a[0] -= dur.years
a[1] -= dur.months
a[2] -= dur.days
a[6] -= dur.milliseconds
return this.calendarSystem.arrayToMarker(a)
}
addYears(marker: DateMarker, n: number) {
let a = this.calendarSystem.markerToArray(marker)
a[0] += n
return this.calendarSystem.arrayToMarker(a)
}
addMonths(marker: DateMarker, n: number) {
let a = this.calendarSystem.markerToArray(marker)
a[1] += n
return this.calendarSystem.arrayToMarker(a)
}
// Diffing Whole Units
diffWholeYears(m0: DateMarker, m1: DateMarker): number {
let { calendarSystem } = this
if (
timeAsMs(m0) === timeAsMs(m1) &&
calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1) &&
calendarSystem.getMarkerMonth(m0) === calendarSystem.getMarkerMonth(m1)
) {
return calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)
}
return null
}
diffWholeMonths(m0: DateMarker, m1: DateMarker): number {
let { calendarSystem } = this
if (
timeAsMs(m0) === timeAsMs(m1) &&
calendarSystem.getMarkerDay(m0) === calendarSystem.getMarkerDay(m1)
) {
return (calendarSystem.getMarkerMonth(m1) - calendarSystem.getMarkerMonth(m0)) +
(calendarSystem.getMarkerYear(m1) - calendarSystem.getMarkerYear(m0)) * 12
}
return null
}
// Range / Duration
greatestWholeUnit(m0: DateMarker, m1: DateMarker) {
let n = this.diffWholeYears(m0, m1)
if (n !== null) {
return { unit: 'year', value: n }
}
n = this.diffWholeMonths(m0, m1)
if (n !== null) {
return { unit: 'month', value: n }
}
n = diffWholeWeeks(m0, m1)
if (n !== null) {
return { unit: 'week', value: n }
}
n = diffWholeDays(m0, m1)
if (n !== null) {
return { unit: 'day', value: n }
}
n = diffHours(m0, m1)
if (isInt(n)) {
return { unit: 'hour', value: n }
}
n = diffMinutes(m0, m1)
if (isInt(n)) {
return { unit: 'minute', value: n }
}
n = diffSeconds(m0, m1)
if (isInt(n)) {
return { unit: 'second', value: n }
}
return { unit: 'millisecond', value: m1.valueOf() - m0.valueOf() }
}
countDurationsBetween(m0: DateMarker, m1: DateMarker, d: Duration) {
// TODO: can use greatestWholeUnit
let diff
if (d.years) {
diff = this.diffWholeYears(m0, m1)
if (diff !== null) {
return diff / asRoughYears(d)
}
}
if (d.months) {
diff = this.diffWholeMonths(m0, m1)
if (diff !== null) {
return diff / asRoughMonths(d)
}
}
if (d.days) {
diff = diffWholeDays(m0, m1)
if (diff !== null) {
return diff / asRoughDays(d)
}
}
return (m1.valueOf() - m0.valueOf()) / asRoughMs(d)
}
// Start-Of
startOf(m: DateMarker, unit: string) {
if (unit === 'year') {
return this.startOfYear(m)
} else if (unit === 'month') {
return this.startOfMonth(m)
} else if (unit === 'week') {
return this.startOfWeek(m)
} else if (unit === 'day') {
return startOfDay(m)
} else if (unit === 'hour') {
return startOfHour(m)
} else if (unit === 'minute') {
return startOfMinute(m)
} else if (unit === 'second') {
return startOfSecond(m)
}
}
startOfYear(m: DateMarker): DateMarker {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(m)
])
}
startOfMonth(m: DateMarker): DateMarker {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(m),
this.calendarSystem.getMarkerMonth(m)
])
}
startOfWeek(m: DateMarker): DateMarker {
return this.calendarSystem.arrayToMarker([
this.calendarSystem.getMarkerYear(m),
this.calendarSystem.getMarkerMonth(m),
m.getUTCDate() - ((m.getUTCDay() - this.weekDow + 7) % 7)
])
}
// Week Number
computeWeekNumber(marker: DateMarker): number {
if (this.weekNumberFunc) {
return this.weekNumberFunc(this.toDate(marker))
} else {
return weekOfYear(marker, this.weekDow, this.weekDoy)
}
}
// TODO: choke on timeZoneName: long
format(marker: DateMarker, formatter: DateFormatter, dateOptions: { forcedTzo?: number } = {}) {
return formatter.format(
{
marker: marker,
timeZoneOffset: dateOptions.forcedTzo != null ?
dateOptions.forcedTzo :
this.offsetForMarker(marker)
},
this
)
}
formatRange(start: DateMarker, end: DateMarker, formatter: DateFormatter, dateOptions: { forcedStartTzo?: number, forcedEndTzo?: number, isEndExclusive?: boolean } = {}) {
if (dateOptions.isEndExclusive) {
end = addMs(end, -1)
}
return formatter.formatRange(
{
marker: start,
timeZoneOffset: dateOptions.forcedStartTzo != null ?
dateOptions.forcedStartTzo :
this.offsetForMarker(start)
},
{
marker: end,
timeZoneOffset: dateOptions.forcedEndTzo != null ?
dateOptions.forcedEndTzo :
this.offsetForMarker(end)
},
this
)
}
formatIso(marker: DateMarker, extraOptions: any = {}) {
let timeZoneOffset = null
if (!extraOptions.omitTimeZoneOffset) {
if (extraOptions.forcedTzo != null) {
timeZoneOffset = extraOptions.forcedTzo
} else {
timeZoneOffset = this.offsetForMarker(marker)
}
}
return buildIsoString(marker, timeZoneOffset, extraOptions.omitTime)
}
// TimeZone
timestampToMarker(ms: number) {
if (this.timeZone === 'local') {
return arrayToUtcDate(dateToLocalArray(new Date(ms)))
} else if (this.timeZone === 'UTC' || !this.namedTimeZoneImpl) {
return new Date(ms)
} else {
return arrayToUtcDate(this.namedTimeZoneImpl.timestampToArray(ms))
}
}
offsetForMarker(m: DateMarker) {
if (this.timeZone === 'local') {
return -arrayToLocalDate(dateToUtcArray(m)).getTimezoneOffset() // convert "inverse" offset to "normal" offset
} else if (this.timeZone === 'UTC') {
return 0
} else if (this.namedTimeZoneImpl) {
return this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m))
}
return null
}
// Conversion
toDate(m: DateMarker, forcedTzo?: number): Date {
if (this.timeZone === 'local') {
return arrayToLocalDate(dateToUtcArray(m))
} else if (this.timeZone === 'UTC') {
return new Date(m.valueOf()) // make sure it's a copy
} else if (!this.namedTimeZoneImpl) {
return new Date(m.valueOf() - (forcedTzo || 0))
} else {
return new Date(
m.valueOf() -
this.namedTimeZoneImpl.offsetForArray(dateToUtcArray(m)) * 1000 * 60 // convert minutes -> ms
)
}
}
}