|
|
|
@ -201,7 +201,7 @@ export class ZPLGenerator { |
|
|
|
case 'day': |
|
|
|
return String(date.getDate()) |
|
|
|
case 'week': |
|
|
|
return this.calculateWeekNumber(date, element.firstWeekDate) |
|
|
|
return this.calculateWeekNumber(date, element.firstDayOfWeek) |
|
|
|
case 'weekday': |
|
|
|
return this.calculateWeekday(date, element.firstDayOfWeek) |
|
|
|
case 'full': |
|
|
|
@ -210,22 +210,34 @@ export class ZPLGenerator { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
calculateWeekNumber(date, firstWeekDateStr) { |
|
|
|
let firstWeekDate = new Date(date.getFullYear(), 0, 1) |
|
|
|
if (firstWeekDateStr) { |
|
|
|
const parsed = this.parseDateString(firstWeekDateStr) |
|
|
|
if (parsed) { |
|
|
|
firstWeekDate = parsed |
|
|
|
} |
|
|
|
} |
|
|
|
const diffMs = date.getTime() - firstWeekDate.getTime() |
|
|
|
calculateWeekNumber(date, firstDayOfWeekStr) { |
|
|
|
const yearStartDate = new Date(date.getFullYear(), 0, 1) |
|
|
|
const firstDayOfWeek = Number(firstDayOfWeekStr === undefined || firstDayOfWeekStr === null || firstDayOfWeekStr === '' ? 0 : firstDayOfWeekStr) |
|
|
|
const normalizedFirstDayOfWeek = Number.isNaN(firstDayOfWeek) ? 0 : Math.max(0, Math.min(6, firstDayOfWeek)) |
|
|
|
|
|
|
|
const diffMs = date.getTime() - yearStartDate.getTime() |
|
|
|
const diffDays = Math.floor(diffMs / 86400000) |
|
|
|
if (diffDays <= 0) { |
|
|
|
return `01${String(date.getFullYear() % 100).padStart(2, '0')}` |
|
|
|
} |
|
|
|
|
|
|
|
const yearStartWeekday = yearStartDate.getDay() // 0=周日,1=周一...6=周六
|
|
|
|
const daysToNextWeekStart = (normalizedFirstDayOfWeek - yearStartWeekday + 7) % 7 |
|
|
|
if (daysToNextWeekStart === 0) { |
|
|
|
const weekNo = Math.floor(diffDays / 7) + 1 |
|
|
|
return String(Math.max(1, weekNo)) |
|
|
|
const normalizedWeekNo = Math.max(1, weekNo) |
|
|
|
return `${String(normalizedWeekNo).padStart(2, '0')}${String(date.getFullYear() % 100).padStart(2, '0')}` |
|
|
|
} |
|
|
|
if (diffDays < daysToNextWeekStart) { |
|
|
|
return `01${String(date.getFullYear() % 100).padStart(2, '0')}` |
|
|
|
} |
|
|
|
const weekNo = Math.floor((diffDays - daysToNextWeekStart) / 7) + 2 |
|
|
|
const normalizedWeekNo = Math.max(1, weekNo) |
|
|
|
return `${String(normalizedWeekNo).padStart(2, '0')}${String(date.getFullYear() % 100).padStart(2, '0')}` |
|
|
|
} |
|
|
|
|
|
|
|
calculateWeekday(date, firstDayOfWeekStr) { |
|
|
|
const firstDayOfWeek = Number(firstDayOfWeekStr || 1) |
|
|
|
const firstDayOfWeek = Number(firstDayOfWeekStr === undefined || firstDayOfWeekStr === null || firstDayOfWeekStr === '' ? 0 : firstDayOfWeekStr) |
|
|
|
const dayOfWeek = date.getDay() === 0 ? 7 : date.getDay() |
|
|
|
const adjustedDay = ((dayOfWeek - firstDayOfWeek + 7) % 7) + 1 |
|
|
|
return String(adjustedDay) |
|
|
|
|