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 ) ;
310}
411
512window . customElements . define ( 'absolute-date' , class extends HTMLElement {
@@ -15,14 +22,8 @@ window.customElements.define('absolute-date', class extends HTMLElement {
1522 const lang = this . closest ( '[lang]' ) ?. getAttribute ( 'lang' ) ||
1623 this . ownerDocument . documentElement . getAttribute ( 'lang' ) || '' ;
1724
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-
2425 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 ) ;
2627 } ;
2728
2829 attributeChangedCallback ( _name , oldValue , newValue ) {
0 commit comments