Temporal.ZonedDateTime.prototype.add()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phương thức add() của các instance Temporal.ZonedDateTime trả về một đối tượng Temporal.ZonedDateTime mới biểu diễn ngày-giờ này được tiến lên một khoảng thời gian nhất định (ở dạng có thể chuyển đổi bởi Temporal.Duration.from()).
Cú pháp
add(duration)
add(duration, options)
Tham số
duration-
Một chuỗi, một đối tượng, hoặc một instance
Temporal.Durationbiểu diễn khoảng thời gian cần cộng vào ngày-giờ này. Nó được chuyển đổi thành đối tượngTemporal.Durationbằng cùng thuật toán nhưTemporal.Duration.from(). optionsOptional-
Một đối tượng chứa thuộc tính sau:
overflowOptional-
Một chuỗi chỉ định hành vi khi một thành phần ngày nằm ngoài phạm vi. Các giá trị có thể là:
"constrain"(mặc định)-
Thành phần ngày được cắt bớt về phạm vi hợp lệ.
"reject"-
Một
RangeErrorđược ném ra nếu thành phần ngày nằm ngoài phạm vi.
Giá trị trả về
Một đối tượng Temporal.ZonedDateTime mới biểu diễn ngày-giờ được xác định bởi ZonedDateTime gốc, cộng thêm khoảng thời gian.
Ngoại lệ
RangeError-
Được ném ra nếu kết quả không nằm trong phạm vi có thể biểu diễn, tức là ±108 ngày, hoặc khoảng ±273.972,6 năm, tính từ Unix epoch.
Mô tả
Để biết cách các calendar duration được cộng, hãy xem Temporal.PlainDate.prototype.add().
Phép cộng và trừ được thực hiện theo các quy tắc được định nghĩa trong RFC 5545 (iCalendar):
- Cộng/trừ phần ngày của duration bằng phép toán lịch; nói cách khác, cộng phần ngày vào
PlainDateTimecủa nó bằngTemporal.PlainDateTime.prototype.add(), rồi diễn giải kết quả trong cùng múi giờ. Kết quả sẽ tự động điều chỉnh theo giờ mùa hè (DST) bằng các quy tắc của trườngtimeZonecủa instance này. Ví dụ,2024-11-03T01:00:00-04:00[America/New_York]cộng thêm một ngày là2024-11-04T01:00:00-05:00[America/New_York], như thể ngày đó có 25 giờ.- Nếu ngày-giờ mơ hồ hoặc không hợp lệ do chuyển đổi offset múi giờ, nó được giải quyết bằng hành vi
disambiguation: "compatible": instant muộn hơn trong hai instant có thể sẽ được dùng cho các chuyển đổi bỏ qua thời gian và instant sớm hơn trong hai instant có thể sẽ được dùng cho các chuyển đổi lặp lại thời gian. Ví dụ,2024-03-09T02:05:00-05:00[America/New_York]cộng thêm một ngày được cho là2024-03-10T02:05:00-05:00[America/New_York], nhưng thời điểm này không tồn tại, vì vậy giờ đồng hồ treo tường một giờ sau đó,2024-03-10T03:05:00-04:00[America/New_York], được trả về. - Nếu offset mơ hồ, nó được giải quyết bằng hành vi
offset: "prefer": offset được sử dụng nếu nó hợp lệ cho múi giờ và giờ địa phương, và được tính lại nếu không. Ví dụ,2024-11-02T01:00:00-04:00[America/New_York]cộng thêm một ngày là2024-11-03T01:00:00-04:00[America/New_York], trong khi2024-11-04T01:00:00-05:00[America/New_York]trừ một ngày là2024-11-03T01:00:00-05:00[America/New_York]. - Nếu các thành phần ngày-giờ kết quả vượt quới giới hạn, chúng được giải quyết bằng tùy chọn
overflow. Ví dụ,2024-08-31cộng thêm một tháng là2024-09-31không tồn tại, vì vậy nó được cắt bớt thành2024-09-30theo mặc định.
- Nếu ngày-giờ mơ hồ hoặc không hợp lệ do chuyển đổi offset múi giờ, nó được giải quyết bằng hành vi
- Cộng/trừ phần thời gian của duration bằng thời gian thực tế; nói cách khác, cộng phần thời gian vào
Instantcủa nó bằngTemporal.Instant.prototype.add(), rồi diễn giải kết quả trong cùng múi giờ. Ví dụ,2024-11-03T01:00:00-04:00[America/New_York]cộng thêm một giờ là2024-11-03T01:00:00-05:00[America/New_York].
Các quy tắc này làm cho phép toán với Temporal.ZonedDateTime "an toàn DST", nghĩa là kết quả phù hợp nhất với kỳ vọng của cả người dùng thực tế và những người triển khai các ứng dụng lịch tuân thủ tiêu chuẩn khác. Những kỳ vọng này bao gồm:
- Cộng hoặc trừ ngày nên giữ nhất quán giờ đồng hồ qua các chuyển đổi DST. Ví dụ, nếu bạn có một cuộc hẹn vào thứ Bảy lúc 1:00 chiều và bạn muốn dời lịch sang 1 ngày sau, bạn kỳ vọng cuộc hẹn được dời vẫn là lúc 1:00 chiều, ngay cả khi có chuyển đổi DST qua đêm.
- Cộng hoặc trừ phần thời gian của duration nên bỏ qua các chuyển đổi DST. Ví dụ, một người bạn bạn đã nhờ gặp trong 2 giờ nữa sẽ bực bội nếu bạn đến 1 giờ hoặc 3 giờ sau. Nên có một thứ tự hoạt động nhất quán và tương đối dễ đoán.
- Nếu kết quả ở gần hoặc tại một chuyển đổi DST, các trường hợp mơ hồ nên được xử lý tự động (không bị crash) và mang tính xác định.
Ví dụ
>Cộng một duration
const start = Temporal.ZonedDateTime.from(
"2021-11-01T12:34:56-04:00[America/New_York]",
);
const end = start.add({
years: 1,
months: 2,
weeks: 3,
days: 4,
hours: 5,
minutes: 6,
seconds: 7,
milliseconds: 8,
});
console.log(end.toString()); // 2023-01-26T17:41:03.008-05:00[America/New_York]
Để xem thêm ví dụ, đặc biệt là cách các calendar khác nhau và tùy chọn overflow tương tác với calendar duration, hãy xem Temporal.PlainDate.prototype.add().
Đặc tả kỹ thuật
| Specification |
|---|
| Temporal> # sec-temporal.zoneddatetime.prototype.add> |