Temporal.ZonedDateTime.prototype.since()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Phương thức since() của các thực thể Temporal.ZonedDateTime trả về một đối tượng Temporal.Duration mới biểu thị khoảng thời gian từ một ngày-giờ khác (dưới dạng có thể chuyển đổi bởi Temporal.ZonedDateTime.from()) đến ngày-giờ này. Khoảng thời gian là dương nếu ngày-giờ kia trước ngày-giờ này, và âm nếu sau.
Phương thức này thực hiện this - other. Để thực hiện other - this, hãy sử dụng phương thức until().
Cú pháp
since(other)
since(other, options)
Tham số
other-
Một chuỗi, một đối tượng, hoặc một thực thể
Temporal.ZonedDateTimebiểu thị ngày-giờ cần trừ khỏi ngày-giờ này. Nó được chuyển đổi thành đối tượngTemporal.ZonedDateTimebằng cùng thuật toán nhưTemporal.ZonedDateTime.from(). Nó phải có cùng lịch vớithis. optionsOptional-
Một đối tượng chứa các tùy chọn cho
Temporal.Duration.prototype.round(), bao gồmlargestUnit,roundingIncrement,roundingModevàsmallestUnit.largestUnitvàsmallestUnitchấp nhận tất cả các đơn vị có thể. Đối vớilargestUnit, giá trị mặc định"auto"có nghĩa là"hours"hoặcsmallestUnit, tùy cái nào lớn hơn. Đối vớismallestUnit, giá trị mặc định là"nanoseconds". Ngày hiện tại được sử dụng làm tùy chọnrelativeTo. Lưu ý rằng sử dụng các đơn vị lớn hơn"hours"có thể làm cho khoảng thời gian không thể chuyển đổi sang các lịch, ngày hoặc múi giờ khác.
Giá trị trả về
Một đối tượng Temporal.Duration mới biểu thị khoảng thời gian kể từ other đến ngày-giờ này. Khoảng thời gian là dương nếu other trước ngày-giờ này, và âm nếu sau.
Ngoại lệ
RangeError-
Được ném ra trong một trong các trường hợp sau:
othercó lịch khác vớithis.- Bất kỳ tùy chọn nào không hợp lệ.
othercó múi giờ khác vớithis, vàlargestUnitlà"days"hoặc lớn hơn.
Mô tả
Khoảng thời gian trả về là khoảng thời gian "hybrid". Điều này có nghĩa là phần ngày của khoảng thời gian biểu thị các ngày lịch đầy đủ như Temporal.PlainDateTime.prototype.since() sẽ trả về, trong khi phần giờ của nó biểu thị thời gian thực đã trôi qua như Temporal.Instant.prototype.since() sẽ trả về. Cách tiếp cận "hybrid duration" này tự động điều chỉnh theo DST và phù hợp với các tiêu chuẩn ngành được áp dụng rộng rãi như RFC 5545 (iCalendar). Xem bên dưới để biết các ví dụ.
Ví dụ
>Chuyển đổi offset
Khi xảy ra chuyển đổi, một ngày có thể không có đúng 24 giờ.
const start = Temporal.ZonedDateTime.from(
"2024-11-03T01:00:00-04:00[America/New_York]",
);
const end = Temporal.ZonedDateTime.from(
"2024-11-04T01:00:00-05:00[America/New_York]",
);
console.log(end.since(start).toString()); // PT25H
console.log(end.since(start, { largestUnit: "days" }).toString()); // PT1D
const start2 = Temporal.ZonedDateTime.from(
"2024-03-10T01:00:00-05:00[America/New_York]",
);
const end2 = Temporal.ZonedDateTime.from(
"2024-03-11T01:00:00-04:00[America/New_York]",
);
console.log(end2.since(start2).toString()); // PT23H
console.log(end2.since(start2, { largestUnit: "days" }).toString()); // PT1D
Vì lý do này, khoảng thời gian trả về mặc định hoàn toàn dựa trên thời gian mà không có phần ngày, để tránh nhầm lẫn.
Múi giờ khác nhau
Phần giờ của khoảng thời gian trả về hoàn toàn dựa trên các thời điểm và không bị ảnh hưởng bởi múi giờ. Tuy nhiên, nếu bạn muốn bao gồm bất kỳ đơn vị ngày nào như day, thì điểm bắt đầu và kết thúc phải ở cùng múi giờ.
const start = Temporal.ZonedDateTime.from(
"2024-11-03T01:00:00-04:00[America/New_York]",
);
// Peru does not use DST so its offset remains -05:00 year-round
const end = Temporal.ZonedDateTime.from(
"2024-11-04T01:00:00-05:00[America/Lima]",
);
end.since(start); // PT25H
end.since(start, { largestUnit: "days" }); // RangeError: time zones "America/Lima" and "America/New_York" aren't compatible
end.withTimeZone("America/New_York").since(start, { largestUnit: "days" }); // P1D
end.since(start.withTimeZone("America/Lima"), { largestUnit: "days" }); // P1D1H
Để biết thêm ví dụ về cách sử dụng since(), đặc biệt với làm tròn, xem Temporal.PlainDate.prototype.since() và Temporal.PlainTime.prototype.since().
Đặc tả
| Specification |
|---|
| Temporal> # sec-temporal.zoneddatetime.prototype.since> |