Temporal.PlainDateTime.prototype.since()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
The since()
method of Temporal.PlainDateTime
instances returns a new Temporal.Duration
object representing the duration from another date-time (in a form convertible by Temporal.PlainDateTime.from()
) to this date-time. The duration is positive if the other date-time is before this date-time, and negative if after.
This method does this - other
. To do other - this
, use the until()
method.
Syntax
since(other)
since(other, options)
Parameters
other
-
A string, an object, or a
Temporal.PlainDateTime
instance representing a date-time to subtract from this date-time. It is converted to aTemporal.PlainDateTime
object using the same algorithm asTemporal.PlainDateTime.from()
. It must have the same calendar asthis
. options
Optional-
An object containing the options for
Temporal.Duration.prototype.round()
, which includeslargestUnit
,roundingIncrement
,roundingMode
, andsmallestUnit
.largestUnit
andsmallestUnit
accept all possible units. ForlargestUnit
, the default value"auto"
means"day"
orsmallestUnit
, whichever is greater. ForsmallestUnit
, the default value is"nanosecond"
. The current date is used as therelativeTo
option. Note that using units larger than"day"
may make the duration not portable to other calendars or dates.
Return value
A new Temporal.Duration
object representing the duration since other
to this date-time. The duration is positive if other
is before this date-time, and negative if after.
Exceptions
RangeError
-
Thrown in one of the following cases:
other
has a different calendar thanthis
.- Any of the options is invalid.
Examples
Using since()
let lastBilling = Temporal.PlainDateTime.from({
year: Temporal.Now.plainDateISO().year,
month: 4,
day: 1,
});
const now = Temporal.Now.plainDateTimeISO().round("second");
if (Temporal.PlainDateTime.compare(lastBilling, now) > 0) {
lastBilling = lastBilling.subtract({ years: 1 });
}
const duration = now.since(lastBilling);
console.log(`${duration.toLocaleString("en-US")} since last billing`);
// Expected output: "[number] days, [number] hr, [number] min, [number] sec since last billing"
const duration2 = now.since(lastBilling, { smallestUnit: "day" });
console.log(`${duration2.toLocaleString("en-US")} since last billing`);
// Expected output: "[number] days since last billing
const duration3 = now.since(lastBilling, {
largestUnit: "year",
smallestUnit: "day",
});
console.log(`${duration3.toLocaleString("en-US")} since last billing`);
// Expected output: "[number] months, [number] days since last billing"
Rounding the result
By default the fractional part of the smallestUnit
is truncated. You can round it up using the roundingIncrement
and roundingMode
options.
const dt1 = Temporal.PlainDateTime.from("2022-01-01T00:00:00");
const dt2 = Temporal.PlainDateTime.from("2022-01-28T12:34:56");
const duration = dt2.since(dt1, {
smallestUnit: "day",
roundingIncrement: 5,
roundingMode: "ceil",
});
console.log(duration.toString()); // "P30D"
Specifications
Specification |
---|
Temporal proposal # sec-temporal.plaindatetime.prototype.since |
Browser compatibility
BCD tables only load in the browser