@@ -20,7 +20,7 @@ const nullForgeUser = {
2020const nullDate = {
2121 id : 1 ,
2222 day : Number . MAX_SAFE_INTEGER ,
23- week : Number . MAX_SAFE_INTEGER ,
23+ week : '' ,
2424 month : Number . MAX_SAFE_INTEGER ,
2525 year : Number . MAX_SAFE_INTEGER ,
2626} satisfies NewTransformDate ;
@@ -61,17 +61,58 @@ export async function seed(db: LibSQLDatabase, startDate: Date, endDate: Date):
6161
6262}
6363
64+ export function getFirstDay ( year : number ) : Date {
65+ let firstDayOfYear = new Date ( Date . UTC ( year , 0 , 1 ) ) ;
66+ if ( firstDayOfYear . getUTCDay ( ) !== 1 ) {
67+ for ( let i = 1 ; i < 4 ; i ++ ) {
68+ const p = new Date ( firstDayOfYear ) ;
69+ const n = new Date ( firstDayOfYear ) ;
70+ p . setUTCDate ( p . getUTCDate ( ) - i ) ;
71+ n . setUTCDate ( n . getUTCDate ( ) + i ) ;
72+ if ( p . getUTCDay ( ) === 1 ) {
73+ firstDayOfYear = p ;
74+ break ;
75+ } else if ( n . getUTCDay ( ) === 1 ) {
76+ firstDayOfYear = n ;
77+ break ;
78+ }
79+ }
80+ }
81+ return firstDayOfYear ;
82+ }
83+
84+ export function checkWeek ( week : number , year : number ) : { newWeek : string } {
85+ let isoWeek = week ;
86+ let isoYear = year ;
87+ if ( week < 1 ) {
88+ const lastDayOfPrev = new Date ( Date . UTC ( year - 1 , 11 , 31 ) ) ;
89+ const firstDayOfPrev = getFirstDay ( year - 1 ) ;
90+ isoWeek = Math . ceil ( ( ( lastDayOfPrev . getTime ( ) - firstDayOfPrev . getTime ( ) ) / ( 24 * 60 * 60 * 1000 ) + 1 ) / 7 )
91+ isoYear = isoYear - 1
92+ }
93+ return { newWeek : `${ isoYear } -W${ isoWeek } ` } ;
94+ }
95+
96+ export function getDateInfo ( date : Date ) : { day : number , week : string , month : number , year : number } {
97+
98+ const firstDay = getFirstDay ( date . getUTCFullYear ( ) ) ;
99+ const week = Math . ceil ( ( ( date . getTime ( ) - firstDay . getTime ( ) ) / ( 24 * 60 * 60 * 1000 ) + 1 ) / 7 ) ;
100+ const { newWeek } = checkWeek ( week , date . getUTCFullYear ( ) ) ;
101+ return {
102+ day : date . getUTCDate ( ) ,
103+ week : newWeek ,
104+ month : date . getUTCMonth ( ) + 1 , // Months are zero-based, so we add 1.
105+ year : date . getUTCFullYear ( ) ,
106+ }
107+ }
108+
64109function generateDates ( startDate : Date , endDate : Date ) {
65110 const dates = [ ] ;
66- const currentDate = new Date ( startDate ) ;
111+ const currentDate = new Date ( Date . UTC ( startDate . getUTCFullYear ( ) , startDate . getUTCMonth ( ) , startDate . getDate ( ) ) ) ;
67112
68113 while ( currentDate <= endDate ) {
69- const customDate = {
70- day : currentDate . getUTCDate ( ) ,
71- week : Math . ceil ( ( ( + currentDate - + new Date ( currentDate . getUTCFullYear ( ) , 0 , 1 ) ) / ( 24 * 60 * 60 * 1000 ) ) / 7 ) ,
72- month : currentDate . getUTCMonth ( ) + 1 , // Months are zero-based, so we add 1.
73- year : currentDate . getUTCFullYear ( ) ,
74- } ;
114+
115+ const customDate = getDateInfo ( currentDate ) ;
75116
76117 dates . push ( customDate ) ;
77118 currentDate . setUTCDate ( currentDate . getUTCDate ( ) + 1 ) ;
0 commit comments