我需要根据区域设置显示一周的开始日期并自定义日期选择器以显示工作日。由于 NativeAdaptor 始终返回星期日作为一周的开始日,因此编写了一个自定义适配器,用于使用 Angular 提供的 https://angular.io/api/common/getLocaleFirstDayOfWeek 覆盖本机 getFirstDayOfWeek() 方法。下面是 CustomAdaptor 类
import { getLocaleFirstDayOfWeek } from '@angular/common';
import { Inject, Injectable, LOCALE_ID } from '@angular/core';
import { NativeDateAdapter } from '@angular/material/core';
@Injectable()
export class CustomDateAdapter extends NativeDateAdapter {
constructor(
@Inject(LOCALE_ID) public locale: string
) {
super(locale);
}
override getFirstDayOfWeek(): number {
return getLocaleFirstDayOfWeek(this.locale);
}
}
此 CustomAdaptor 适用于“nl-NL”和“fr-FR”,它们返回星期一作为一周的开始日。但是 getLocaleFirstDayOfWeek('en-FR') 返回星期日,而 getLocaleFirstDayOfWeek('nl-NL') 返回星期一。所以申请是不一致的。与 https://www.google.com/travel/flights?gl=NL 进行比较时,“en-NL”和“en-FR”应返回星期一作为一周的开始日。 那么,获取一周第一天的唯一事实来源是哪一个呢?或者我的实现中是否需要进行任何修正?
根据 Angualar 文档,
检索给定区域设置的一周的第一天。
getLocaleFirstDayOfWeek(区域设置:字符串):WeekDay
区域设置字符串 -> 要使用的区域设置格式规则的区域设置代码。
退货
WeekDay:日索引编号,对于 en-US 使用从 0 开始的工作日索引(星期日 = 0,星期一 = 1,...)。例如,对于 fr-FR,返回 1 表示第一天是星期一。
解决方法就是始终返回零!
override getFirstDayOfWeek(): number {
return 0;
}
源代码:Angular/packages/common/locales /closure-locale.ts
这里的第 8 个索引是属性
firstDay of the week number
的 locale_fr
!