1
- export function toAbsoluteLocaleDate ( date : string , lang : string , opts : Intl . DateTimeFormatOptions ) {
2
- return new Date ( date ) . toLocaleString ( lang || [ ] , opts ) ;
1
+ export function toAbsoluteLocaleDate ( date : string , lang ?: string , opts ?: Intl . DateTimeFormatOptions ) {
2
+ // only use the date part, it is guaranteed to be in ISO format (YYYY-MM-DDTHH:mm:ss.sssZ) or (YYYY-MM-DD)
3
+ // if there is an "Invalid Date" error, there must be something wrong in code and should be fixed.
4
+ // TODO: there is a root problem in backend code: the date "YYYY-MM-DD" is passed to backend without timezone (eg: deadline),
5
+ // then backend parses it in server's timezone and stores the parsed timestamp into database.
6
+ // If the user's timezone is different from the server's, the date might be displayed in the wrong day.
7
+ const dateSep = date . indexOf ( 'T' ) ;
8
+ date = dateSep === - 1 ? date : date . substring ( 0 , dateSep ) ;
9
+ return new Date ( `${ date } T00:00:00` ) . toLocaleString ( lang || [ ] , opts ) ;
3
10
}
4
11
5
12
window . customElements . define ( 'absolute-date' , class extends HTMLElement {
@@ -15,14 +22,8 @@ window.customElements.define('absolute-date', class extends HTMLElement {
15
22
const lang = this . closest ( '[lang]' ) ?. getAttribute ( 'lang' ) ||
16
23
this . ownerDocument . documentElement . getAttribute ( 'lang' ) || '' ;
17
24
18
- // only use the date part, it is guaranteed to be in ISO format (YYYY-MM-DDTHH:mm:ss.sssZ)
19
- let date = this . getAttribute ( 'date' ) ;
20
- let dateSep = date . indexOf ( 'T' ) ;
21
- dateSep = dateSep === - 1 ? date . indexOf ( ' ' ) : dateSep ;
22
- date = dateSep === - 1 ? date : date . substring ( 0 , dateSep ) ;
23
-
24
25
if ( ! this . shadowRoot ) this . attachShadow ( { mode : 'open' } ) ;
25
- this . shadowRoot . textContent = toAbsoluteLocaleDate ( date , lang , opt ) ;
26
+ this . shadowRoot . textContent = toAbsoluteLocaleDate ( this . getAttribute ( ' date' ) , lang , opt ) ;
26
27
} ;
27
28
28
29
attributeChangedCallback ( _name , oldValue , newValue ) {
0 commit comments