fix : wip
This commit is contained in:
@@ -42,6 +42,46 @@ export const getWeekStartDate = (date: Date) => {
|
||||
return copy
|
||||
}
|
||||
|
||||
export const getIsoWeekNumber = (date: Date) => {
|
||||
const utc = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))
|
||||
const day = utc.getUTCDay() || 7
|
||||
utc.setUTCDate(utc.getUTCDate() + 4 - day)
|
||||
const yearStart = new Date(Date.UTC(utc.getUTCFullYear(), 0, 1))
|
||||
return Math.ceil((((utc.getTime() - yearStart.getTime()) / 86400000) + 1) / 7)
|
||||
}
|
||||
|
||||
export const getIsoWeekYear = (date: Date) => {
|
||||
const utc = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()))
|
||||
const day = utc.getUTCDay() || 7
|
||||
utc.setUTCDate(utc.getUTCDate() + 4 - day)
|
||||
return utc.getUTCFullYear()
|
||||
}
|
||||
|
||||
export const ymdToWeekInputValue = (dateYmd: string) => {
|
||||
const parsed = parseYmd(dateYmd)
|
||||
if (!parsed) return ''
|
||||
const weekDate = getWeekStartDate(parsed)
|
||||
const weekNumber = getIsoWeekNumber(weekDate)
|
||||
const weekYear = getIsoWeekYear(weekDate)
|
||||
return `${weekYear}-W${String(weekNumber).padStart(2, '0')}`
|
||||
}
|
||||
|
||||
export const weekInputValueToYmd = (weekValue: string) => {
|
||||
const match = /^(\d{4})-W(\d{2})$/.exec(weekValue)
|
||||
if (!match) return null
|
||||
|
||||
const year = Number(match[1])
|
||||
const week = Number(match[2])
|
||||
if (!Number.isInteger(year) || !Number.isInteger(week) || week < 1 || week > 53) return null
|
||||
|
||||
const jan4 = new Date(year, 0, 4)
|
||||
const week1Monday = getWeekStartDate(jan4)
|
||||
const monday = new Date(week1Monday)
|
||||
monday.setDate(week1Monday.getDate() + ((week - 1) * 7))
|
||||
|
||||
return toYmd(monday.getFullYear(), monday.getMonth(), monday.getDate())
|
||||
}
|
||||
|
||||
export const getTodayYmd = () => {
|
||||
const date = new Date()
|
||||
return toYmd(date.getFullYear(), date.getMonth(), date.getDate())
|
||||
@@ -64,6 +104,7 @@ export const formatWeekRangeFr = (date: Date) => {
|
||||
const start = getWeekStartDate(date)
|
||||
const end = new Date(start)
|
||||
end.setDate(start.getDate() + 6)
|
||||
const weekNumber = getIsoWeekNumber(start)
|
||||
|
||||
const formatter = new Intl.DateTimeFormat('fr-FR', {
|
||||
day: '2-digit',
|
||||
@@ -71,7 +112,7 @@ export const formatWeekRangeFr = (date: Date) => {
|
||||
year: 'numeric'
|
||||
})
|
||||
|
||||
return `Semaine du ${formatter.format(start)} au ${formatter.format(end)}`
|
||||
return `S${weekNumber} du ${formatter.format(start)} au ${formatter.format(end)}`
|
||||
}
|
||||
|
||||
export const getDaysInMonth = (year: number, month: number) => {
|
||||
|
||||
Reference in New Issue
Block a user