Temporal.Duration.prototype.with()

Khả dụng hạn chế

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Phương thức with() của các instance Temporal.Duration trả về một đối tượng Temporal.Duration mới biểu diễn duration này với một số trường được thay thế bằng các giá trị mới. Vì tất cả các đối tượng Temporal được thiết kế để bất biến, phương thức này về cơ bản hoạt động như setter cho các trường của duration.

Cú pháp

js
with(info)

Tham số

info

Một đối tượng chứa ít nhất một trong các thuộc tính được nhận bởi Temporal.Duration.from(): years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds. Các thuộc tính không được chỉ định sẽ sử dụng các giá trị từ duration gốc.

Giá trị trả về

Một đối tượng Temporal.Duration mới, trong đó các trường được chỉ định trong info mà không phải undefined được thay thế bằng các giá trị tương ứng, và phần còn lại của các trường được sao chép từ duration gốc.

Ngoại lệ

RangeError

Được ném ra trong một trong các trường hợp sau:

  • Bất kỳ thuộc tính nào được nhận trong đối tượng info không phải là số nguyên (bao gồm cả các giá trị không hữu hạn).
  • Một đơn vị lịch (years, months, weeks) có giá trị tuyệt đối ≥ 232.
  • Phần không phải lịch của duration (days trở xuống), khi biểu diễn bằng giây, có giá trị tuyệt đối ≥ 253.
TypeError

Được ném ra trong một trong các trường hợp sau:

  • Đối tượng info không phải là một đối tượng.
  • Tất cả các thuộc tính được nhận trong đối tượng info đều là undefined.

Ví dụ

Sử dụng with()

Bạn có thể sử dụng with() để kiểm soát chi tiết các trường của đối tượng Temporal.Duration. Ví dụ, bạn có thể cân bằng thủ công một duration chỉ trên một đơn vị, điều mà round() không cung cấp:

js
function balanceMinutes(duration) {
  const { hours, minutes } = duration;
  const totalMinutes = hours * 60 + minutes;
  const balancedMinutes = totalMinutes % 60;
  const balancedHours = (totalMinutes - balancedMinutes) / 60;
  return duration.with({ hours: balancedHours, minutes: balancedMinutes });
}

const d1 = Temporal.Duration.from({ hours: 100, minutes: 100, seconds: 100 });
const d2 = balanceMinutes(d1);
console.log(d2.hours); // 101
console.log(d2.minutes); // 40
console.log(d2.seconds); // 100; vẫn chưa được cân bằng

Đặc tả

Thông số kỹ thuật
Temporal
# sec-temporal.duration.prototype.with

Tương thích trình duyệt

Xem thêm