| 12345678910111213141516171819202122232425 |
- /** SIM 月份同时存在 yyyy-MM (SmartHub) 和 yyyyMM (Acceleronix) 两种格式。 */
- const MONTH_PATTERN = /^(\d{4})(-?)(0[1-9]|1[0-2])$/
- function parseMonth(month: string): { year: number; monthNumber: number; dashed: boolean } {
- const match = MONTH_PATTERN.exec(month)
- if (!match) throw new Error(`Invalid SIM card month: ${month}`)
- return {
- year: Number(match[1]),
- monthNumber: Number(match[3]),
- dashed: match[2] === '-',
- }
- }
- export function getDaysInMonth(month: string): number {
- const { year, monthNumber } = parseMonth(month)
- return new Date(year, monthNumber, 0).getDate()
- }
- export function getPrevMonth(month: string): string {
- const { year, monthNumber, dashed } = parseMonth(month)
- const previous = new Date(year, monthNumber - 2, 1)
- const separator = dashed ? '-' : ''
- return `${previous.getFullYear()}${separator}${String(previous.getMonth() + 1).padStart(2, '0')}`
- }
|