@@ -20,7 +20,7 @@ const nullForgeUser = {
20
20
const nullDate = {
21
21
id : 1 ,
22
22
day : Number . MAX_SAFE_INTEGER ,
23
- week : Number . MAX_SAFE_INTEGER ,
23
+ week : '' ,
24
24
month : Number . MAX_SAFE_INTEGER ,
25
25
year : Number . MAX_SAFE_INTEGER ,
26
26
} satisfies NewTransformDate ;
@@ -61,17 +61,58 @@ export async function seed(db: LibSQLDatabase, startDate: Date, endDate: Date):
61
61
62
62
}
63
63
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
+
64
109
function generateDates ( startDate : Date , endDate : Date ) {
65
110
const dates = [ ] ;
66
- const currentDate = new Date ( startDate ) ;
111
+ const currentDate = new Date ( Date . UTC ( startDate . getUTCFullYear ( ) , startDate . getUTCMonth ( ) , startDate . getDate ( ) ) ) ;
67
112
68
113
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 ) ;
75
116
76
117
dates . push ( customDate ) ;
77
118
currentDate . setUTCDate ( currentDate . getUTCDate ( ) + 1 ) ;
0 commit comments