Temporal.PlainDate.prototype.dayOfWeek

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

dayOfWeek 访问器属性,属于 Temporal.PlainDate 实例,返回一个正整数,表示此日期在一周中的基于 1 的索引。一周中的天数按顺序从 1 编号到 daysInWeek,每个数字都映射到其名称。它依赖于 日历。1 通常表示日历中的星期一,即使使用该日历的区域设置可能认为不同的日期是星期中的第一天(请参阅 Intl.Locale.prototype.getWeekInfo())。

所有常用支持的日历都使用 7 天的周,并且通常可以预期此属性在不同日历上对同一日期返回相同的值。

dayOfWeek 的 setter 访问器为 undefined。您不能直接修改此属性。要创建一个具有所需新 dayOfWeek 值的 Temporal.PlainDate 对象,请使用 add()subtract() 方法并提供适当的 days 值。

示例

使用 dayOfWeek

js
const date = Temporal.PlainDate.from("2021-07-01");
console.log(date.dayOfWeek); // 4; Thursday

const date2 = Temporal.PlainDate.from("2021-07-01[u-ca=chinese]");
console.log(date2.dayOfWeek); // 4

更改 dayOfWeek

PlainDate 不支持直接更改 dayOfWeek。要更改星期几,您需要先计算出与您想要的星期几之间的天数差,然后使用 addsubtract 来相应地调整日期。例如,要更改为本周的星期五(无论是在之前还是之后)

js
function getDayInSameWeek(date, destDayOfWeek) {
  return date.add({ days: destDayOfWeek - date.dayOfWeek });
}

console.log(
  getDayInSameWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
); // 2021-07-02
console.log(
  getDayInSameWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
); // 2021-07-02

更改为下一个星期五

js
function getNextDayInWeek(date, destDayOfWeek) {
  const distance = destDayOfWeek - date.dayOfWeek;
  return date.add({
    days: distance < 0 ? date.daysInWeek + distance : distance,
  });
}

console.log(
  getNextDayInWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
); // 2021-07-02
console.log(
  getNextDayInWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
); // 2021-07-09

更改为上一个星期五

js
function getPreviousDayInWeek(date, destDayOfWeek) {
  const distance = date.dayOfWeek - destDayOfWeek;
  return date.subtract({
    days: distance < 0 ? date.daysInWeek + distance : distance,
  });
}

console.log(
  getPreviousDayInWeek(Temporal.PlainDate.from("2021-07-01"), 5).toString(),
); // 2021-06-25
console.log(
  getPreviousDayInWeek(Temporal.PlainDate.from("2021-07-03"), 5).toString(),
); // 2021-07-02

规范

规范
Temporal
# sec-get-temporal.plaindate.prototype.dayofweek

浏览器兼容性

另见