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 29, 2024
1 parent ff3d342 commit 638e894
Showing 1 changed file with 20 additions and 1 deletion.
21 changes: 20 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,26 @@ 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;

if (firstDay != null) {
// `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 638e894

Please sign in to comment.