Skip to content

Commit

Permalink
fix(material/core): infer first day of week in native date adapter
Browse files Browse the repository at this point in the history
Some browsers provide information about the first day of the week so we can infer it in the `NativeDateAdapter`.
  • Loading branch information
crisbeto committed Sep 30, 2024
1 parent ff3d342 commit 57a0b91
Showing 1 changed file with 18 additions and 1 deletion.
19 changes: 18 additions & 1 deletion src/material/core/datetime/native-date-adapter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,24 @@ export class NativeDateAdapter extends DateAdapter<Date> {
}

getFirstDayOfWeek(): number {
// We can't tell using native JS Date what the first day of the week is, we default to Sunday.
// At the time of writing `Intl.Locale` isn't available
// in the internal types so we need to cast to `any`.
if (typeof Intl !== 'undefined' && (Intl as any).Locale) {
const locale = new (Intl as any).Locale(this.locale) as {
getWeekInfo?: () => {firstDay: number};
weekInfo?: {firstDay: number};
};

// Some browsers implement a `getWeekInfo` method while others have a `weekInfo` getter.
// Note that this isn't supported in all browsers so we need to null check it.
const firstDay = (locale.getWeekInfo?.() || locale.weekInfo)?.firstDay ?? 0;

// `weekInfo.firstDay` is a number between 1 and 7 where, starting from Monday,
// whereas our representation is 0 to 6 where 0 is Sunday so we need to normalize it.
return firstDay === 7 ? 0 : firstDay;
}

// Default to Sunday if the browser doesn't provide the week information.
return 0;
}

Expand Down

0 comments on commit 57a0b91

Please sign in to comment.