8c7f633541
- var→const/let, function→arrow/class across all 13 JS files - Timer: prototype→class with ES6 getters - plan days: IIFE→Array.from declarative generation - storage/plan: unified formatDate via util.js - Bugfix: getPlanDay now filters by planId (plan switch accuracy) - Bugfix: getTodayRecord searches all months (cross-month boundary) - WXML/WXSS unchanged; public API unchanged
50 lines
1.2 KiB
JavaScript
50 lines
1.2 KiB
JavaScript
const formatTime = (seconds) => {
|
|
const m = Math.floor(seconds / 60)
|
|
const s = seconds % 60
|
|
return `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`
|
|
}
|
|
|
|
const formatDuration = (seconds) => {
|
|
if (seconds < 60) return `${seconds}秒`
|
|
const m = Math.floor(seconds / 60)
|
|
const s = seconds % 60
|
|
return s > 0 ? `${m}分${s}秒` : `${m}分钟`
|
|
}
|
|
|
|
const getDaysInMonth = (year, month) => new Date(year, month, 0).getDate()
|
|
|
|
const getMonthCalendar = (year, month) => {
|
|
const firstDay = new Date(year, month - 1, 1)
|
|
const daysInMonth = new Date(year, month, 0).getDate()
|
|
const startDayOfWeek = firstDay.getDay()
|
|
|
|
const weeks = []
|
|
let week = [null, null, null, null, null, null, null]
|
|
|
|
for (let d = 1; d <= daysInMonth; d++) {
|
|
const dow = (startDayOfWeek + d - 1) % 7
|
|
week[dow] = d
|
|
if (dow === 6 || d === daysInMonth) {
|
|
weeks.push(week.slice())
|
|
week = [null, null, null, null, null, null, null]
|
|
}
|
|
}
|
|
|
|
return weeks
|
|
}
|
|
|
|
const formatDate = (date) => {
|
|
const y = date.getFullYear()
|
|
const m = String(date.getMonth() + 1).padStart(2, '0')
|
|
const d = String(date.getDate()).padStart(2, '0')
|
|
return `${y}-${m}-${d}`
|
|
}
|
|
|
|
module.exports = {
|
|
formatTime,
|
|
formatDuration,
|
|
getDaysInMonth,
|
|
getMonthCalendar,
|
|
formatDate
|
|
}
|