UNPKG

@everwhen/temporal

Version:
70 lines (69 loc) 2.2 kB
import { Temporal } from 'temporal-polyfill'; import { Duration } from "./duration.js"; import { max, min } from "./fn/index.js"; import { PlainDate } from "./plain-date.js"; export class PlainYearMonth extends Temporal.PlainYearMonth { static now() { return PlainYearMonth.from(PlainDate.now()); } static from(...args) { const month = Temporal.PlainYearMonth.from(...args); return new PlainYearMonth(month.year, month.month); } static max(...dates) { return max(...dates); } static min(...dates) { return min(...dates); } compare(other) { return PlainYearMonth.compare(this, other); } /** * Compares two PlainYearMonth objects. * Comparison is based on the first day of the month in the real world, regardless of the calendar. * * @link https://tc39.es/proposal-temporal/docs/plainyearmonth.html#compare */ isBefore(other) { return PlainYearMonth.compare(this, other) === -1; } /** * Compares two PlainYearMonth objects. * Comparison is based on the first day of the month in the real world, regardless of the calendar. * * @link https://tc39.es/proposal-temporal/docs/plainyearmonth.html#compare */ isAfter(other) { return PlainYearMonth.compare(this, other) === 1; } add(...args) { return PlainYearMonth.from(super.add(...args)); } subtract(...args) { return PlainYearMonth.from(super.subtract(...args)); } contains(date) { return (PlainYearMonth.compare(this, date) <= 0 && PlainYearMonth.compare(this, date) >= 0); } startOfMonth() { return this.toPlainDate({ day: 1 }); } endOfMonth() { return this.toPlainDate({ day: this.toPlainDate().daysInMonth }); } toPlainDate(day) { const opts = day ? day : { day: 1 }; return PlainDate.from(super.toPlainDate(opts)); } with(...args) { return PlainYearMonth.from(super.with(...args)); } until(...args) { return Duration.from(super.until(...args)); } since(...args) { return Duration.from(super.since(...args)); } }