1
1
import { getTypeName , isPlainMonthDay } from "../type-utils.js" ;
2
2
import type { Temporal } from "../types.js" ;
3
+ import { padLeadingZeros } from "./_padLeadingZeros.js" ;
3
4
import { secondsToHms } from "./_secondsToHms.js" ;
4
5
5
6
type DateTime =
@@ -26,11 +27,11 @@ function year(
26
27
return year ;
27
28
}
28
29
if ( token === "yy" ) {
29
- return ( dateTime . year % 100 ) . toString ( ) . padStart ( 2 , "0" ) ;
30
+ return padLeadingZeros ( dateTime . year % 100 , 2 ) ;
30
31
}
31
32
if ( / ^ y + $ / . test ( token ) ) {
32
33
if ( token . length > year . length ) {
33
- return year . padStart ( token . length , "0" ) ;
34
+ return padLeadingZeros ( year , token . length ) ;
34
35
} else {
35
36
return year ;
36
37
}
@@ -90,7 +91,7 @@ function month(
90
91
return month . toString ( ) ;
91
92
}
92
93
if ( token === "MM" ) {
93
- return month . toString ( ) . padStart ( 2 , "0" ) ;
94
+ return padLeadingZeros ( month , 2 ) ;
94
95
}
95
96
96
97
throw new Error ( `Invalid token: ${ token } ` ) ;
@@ -111,7 +112,7 @@ function day(
111
112
return dateTime . day . toString ( ) ;
112
113
}
113
114
if ( token === "dd" ) {
114
- return dateTime . day . toString ( ) . padStart ( 2 , "0" ) ;
115
+ return padLeadingZeros ( dateTime . day , 2 ) ;
115
116
}
116
117
throw new Error ( `Invalid token: ${ token } ` ) ;
117
118
}
@@ -120,20 +121,18 @@ function hour(dateTime: DateTime, token: string): string {
120
121
if ( ! ( "hour" in dateTime ) ) {
121
122
throw new Error ( `${ getTypeName ( dateTime ) } doesn't have hour info` ) ;
122
123
}
123
- const hour12 = (
124
- dateTime . hour % 12 === 0 ? 12 : dateTime . hour % 12
125
- ) . toString ( ) ;
124
+ const hour12 = dateTime . hour % 12 === 0 ? 12 : dateTime . hour % 12 ;
126
125
if ( token === "h" ) {
127
- return hour12 ;
126
+ return hour12 . toString ( ) ;
128
127
}
129
128
if ( token === "hh" ) {
130
- return hour12 . padStart ( 2 , "0" ) ;
129
+ return padLeadingZeros ( hour12 , 2 ) ;
131
130
}
132
131
if ( token === "H" ) {
133
132
return dateTime . hour . toString ( ) ;
134
133
}
135
134
if ( token === "HH" ) {
136
- return dateTime . hour . toString ( ) . padStart ( 2 , "0" ) ;
135
+ return padLeadingZeros ( dateTime . hour , 2 ) ;
137
136
}
138
137
throw new Error ( `Invalid token: ${ token } ` ) ;
139
138
}
@@ -146,7 +145,7 @@ function minute(dateTime: DateTime, token: string): string {
146
145
return dateTime . minute . toString ( ) ;
147
146
}
148
147
if ( token === "mm" ) {
149
- return dateTime . minute . toString ( ) . padStart ( 2 , "0" ) ;
148
+ return padLeadingZeros ( dateTime . minute , 2 ) ;
150
149
}
151
150
throw new Error ( `Invalid token: ${ token } ` ) ;
152
151
}
@@ -159,7 +158,7 @@ function second(dateTime: DateTime, token: string): string {
159
158
return dateTime . second . toString ( ) ;
160
159
}
161
160
if ( token === "ss" ) {
162
- return dateTime . second . toString ( ) . padStart ( 2 , "0" ) ;
161
+ return padLeadingZeros ( dateTime . second , 2 ) ;
163
162
}
164
163
throw new Error ( `Invalid token: ${ token } ` ) ;
165
164
}
@@ -179,9 +178,9 @@ function fractionalSecond(dateTime: DateTime, token: string): string {
179
178
if ( ! / ^ S + $ / . test ( token ) ) {
180
179
throw new Error ( `Invalid token: ${ token } ` ) ;
181
180
}
182
- const millisec = dateTime . millisecond . toString ( ) . padStart ( 3 , "0" ) ;
183
- const microsec = dateTime . microsecond . toString ( ) . padStart ( 3 , "0" ) ;
184
- const nanosec = dateTime . nanosecond . toString ( ) . padStart ( 3 , "0" ) ;
181
+ const millisec = padLeadingZeros ( dateTime . millisecond , 3 ) ;
182
+ const microsec = padLeadingZeros ( dateTime . microsecond , 3 ) ;
183
+ const nanosec = padLeadingZeros ( dateTime . nanosecond , 3 ) ;
185
184
const fracSec = `${ millisec } ${ microsec } ${ nanosec } ` ;
186
185
187
186
if ( token . length >= fracSec . length ) {
@@ -203,9 +202,9 @@ function offset(dateTime: DateTime, token: string) {
203
202
}
204
203
const sign = offsetSeconds < 0 ? "-" : "+" ;
205
204
const hms = secondsToHms ( Math . abs ( offsetSeconds ) ) ;
206
- const hour = hms . hour . toString ( ) . padStart ( 2 , "0" ) ;
207
- const minute = hms . minute . toString ( ) . padStart ( 2 , "0" ) ;
208
- const second = hms . second . toString ( ) . padStart ( 2 , "0" ) ;
205
+ const hour = padLeadingZeros ( hms . hour , 2 ) ;
206
+ const minute = padLeadingZeros ( hms . minute , 2 ) ;
207
+ const second = padLeadingZeros ( hms . second , 2 ) ;
209
208
if ( token === "X" || token === "x" ) {
210
209
return hms . minute === 0 ? `${ sign } ${ hour } ` : `${ sign } ${ hour } ${ minute } ` ;
211
210
}
0 commit comments