Files
test/uniapp/utils/date.js
T
2026-06-11 09:53:11 +08:00

104 lines
2.5 KiB
JavaScript

function pad(value) {
return String(value).padStart(2, '0')
}
export function parseDate(input = new Date()) {
if (input instanceof Date) {
return new Date(input.getTime())
}
if (typeof input === 'number') {
return new Date(input)
}
if (typeof input === 'string') {
if (/^\d{4}-\d{2}-\d{2}$/.test(input)) {
const [year, month, day] = input.split('-').map(Number)
return new Date(year, month - 1, day)
}
if (/^\d{4}-\d{2}$/.test(input)) {
const [year, month] = input.split('-').map(Number)
return new Date(year, month - 1, 1)
}
return new Date(input.replace(/-/g, '/'))
}
return new Date()
}
export function toDateKey(input = new Date()) {
const date = parseDate(input)
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`
}
export function toMonthKey(input = new Date()) {
const date = parseDate(input)
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}`
}
export function formatDateLabel(value) {
if (!value) {
return ''
}
const date = parseDate(value)
const weekMap = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
return `${date.getMonth() + 1}${date.getDate()}${weekMap[date.getDay()]}`
}
export function formatMonthLabel(monthKey) {
if (!monthKey) {
return ''
}
const [year, month] = monthKey.split('-')
return `${year}${Number(month)}`
}
export function isSameMonth(dateValue, monthKey) {
return toMonthKey(dateValue) === monthKey
}
export function getMonthDays(monthKey) {
const [year, month] = monthKey.split('-').map(Number)
return new Date(year, month, 0).getDate()
}
export function getDaysLeftInMonth(monthKey) {
const today = new Date()
if (toMonthKey(today) !== monthKey) {
return getMonthDays(monthKey)
}
return getMonthDays(monthKey) - today.getDate() + 1
}
export function getRecentDateKeys(days, endDate = new Date()) {
const result = []
const end = parseDate(endDate)
for (let index = days - 1; index >= 0; index -= 1) {
const current = new Date(end)
current.setDate(end.getDate() - index)
result.push(toDateKey(current))
}
return result
}
export function getMonthSeries(length, endMonthKey = toMonthKey()) {
const [year, month] = endMonthKey.split('-').map(Number)
const cursor = new Date(year, month - 1, 1)
const result = []
for (let index = length - 1; index >= 0; index -= 1) {
const current = new Date(cursor)
current.setMonth(cursor.getMonth() - index)
result.push(toMonthKey(current))
}
return result
}