mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 20:33:10 +00:00
LibJS: Simplify DaysUntil
This is an editorial change in the Temporal spec. See: https://github.com/tc39/proposal-temporal/commit/b2254b4
This commit is contained in:
parent
de0ea331cd
commit
6a2b73a4a9
|
@ -1063,8 +1063,8 @@ ThrowCompletionOr<MoveRelativeDateResult> move_relative_date(GlobalObject& globa
|
|||
// 1. Let newDate be ? CalendarDateAdd(calendar, relativeTo, duration, options).
|
||||
auto* new_date = TRY(calendar_date_add(global_object, calendar, &relative_to, duration));
|
||||
|
||||
// 2. Let days be ! DaysUntil(relativeTo, newDate).
|
||||
auto days = days_until(global_object, relative_to, *new_date);
|
||||
// 2. Let days be DaysUntil(relativeTo, newDate).
|
||||
auto days = days_until(relative_to, *new_date);
|
||||
|
||||
// 3. Return the Record { [[RelativeTo]]: newDate, [[Days]]: days }.
|
||||
return MoveRelativeDateResult { .relative_to = make_handle(new_date), .days = days };
|
||||
|
@ -1190,8 +1190,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(GlobalObject& global_object, d
|
|||
// e. Let yearsMonthsWeeksLater be ? CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd).
|
||||
auto* years_months_weeks_later = TRY(calendar_date_add(global_object, *calendar, relative_to, *years_months_weeks, nullptr, date_add));
|
||||
|
||||
// f. Let monthsWeeksInDays be ? DaysUntil(yearsLater, yearsMonthsWeeksLater).
|
||||
auto months_weeks_in_days = days_until(global_object, *years_later, *years_months_weeks_later);
|
||||
// f. Let monthsWeeksInDays be DaysUntil(yearsLater, yearsMonthsWeeksLater).
|
||||
auto months_weeks_in_days = days_until(*years_later, *years_months_weeks_later);
|
||||
|
||||
// g. Set relativeTo to yearsLater.
|
||||
relative_to = years_later;
|
||||
|
@ -1229,8 +1229,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(GlobalObject& global_object, d
|
|||
// r. Set relativeTo to ? CalendarDateAdd(calendar, relativeTo, yearsDuration, undefined, dateAdd).
|
||||
relative_to = TRY(calendar_date_add(global_object, *calendar, relative_to, *years_duration, nullptr, date_add));
|
||||
|
||||
// s. Let daysPassed be ? DaysUntil(oldRelativeTo, relativeTo).
|
||||
auto days_passed = days_until(global_object, *old_relative_to, *relative_to);
|
||||
// s. Let daysPassed be DaysUntil(oldRelativeTo, relativeTo).
|
||||
auto days_passed = days_until(*old_relative_to, *relative_to);
|
||||
|
||||
// t. Set days to days - daysPassed.
|
||||
days -= days_passed;
|
||||
|
@ -1280,8 +1280,8 @@ ThrowCompletionOr<RoundedDuration> round_duration(GlobalObject& global_object, d
|
|||
// e. Let yearsMonthsWeeksLater be ? CalendarDateAdd(calendar, relativeTo, yearsMonthsWeeks, undefined, dateAdd).
|
||||
auto* years_months_weeks_later = TRY(calendar_date_add(global_object, *calendar, relative_to, *years_months_weeks, nullptr, date_add));
|
||||
|
||||
// f. Let weeksInDays be ? DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater).
|
||||
auto weeks_in_days = days_until(global_object, *years_months_later, *years_months_weeks_later);
|
||||
// f. Let weeksInDays be DaysUntil(yearsMonthsLater, yearsMonthsWeeksLater).
|
||||
auto weeks_in_days = days_until(*years_months_later, *years_months_weeks_later);
|
||||
|
||||
// g. Set relativeTo to yearsMonthsLater.
|
||||
relative_to = years_months_later;
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include <AK/Optional.h>
|
||||
#include <LibJS/Heap/Handle.h>
|
||||
#include <LibJS/Runtime/Completion.h>
|
||||
#include <LibJS/Runtime/Date.h>
|
||||
#include <LibJS/Runtime/Object.h>
|
||||
#include <LibJS/Runtime/Temporal/PlainDate.h>
|
||||
#include <LibJS/Runtime/Temporal/PlainDateTime.h>
|
||||
|
@ -163,13 +164,22 @@ ThrowCompletionOr<Duration*> add_duration_to_or_subtract_duration_from_duration(
|
|||
|
||||
// 7.5.22 DaysUntil ( earlier, later ), https://tc39.es/proposal-temporal/#sec-temporal-daysuntil
|
||||
template<typename EarlierObjectType, typename LaterObjectType>
|
||||
double days_until(GlobalObject& global_object, EarlierObjectType& earlier, LaterObjectType& later)
|
||||
double days_until(EarlierObjectType& earlier, LaterObjectType& later)
|
||||
{
|
||||
// 1. Let difference be ! DifferenceISODate(earlier.[[ISOYear]], earlier.[[ISOMonth]], earlier.[[ISODay]], later.[[ISOYear]], later.[[ISOMonth]], later.[[ISODay]], "day").
|
||||
auto difference = difference_iso_date(global_object, earlier.iso_year(), earlier.iso_month(), earlier.iso_day(), later.iso_year(), later.iso_month(), later.iso_day(), "day"sv);
|
||||
// 1. Let epochDays1 be MakeDay(𝔽(earlier.[[ISOYear]]), 𝔽(earlier.[[ISOMonth]] - 1), 𝔽(earlier.[[ISODay]])).
|
||||
auto epoch_days_1 = make_day(earlier.iso_year(), earlier.iso_month() - 1, earlier.iso_day());
|
||||
|
||||
// 2. Return difference.[[Days]].
|
||||
return difference.days;
|
||||
// 2. Assert: epochDays1 is finite.
|
||||
VERIFY(isfinite(epoch_days_1));
|
||||
|
||||
// 3. Let epochDays2 be MakeDay(𝔽(later.[[ISOYear]]), 𝔽(later.[[ISOMonth]] - 1), 𝔽(later.[[ISODay]])).
|
||||
auto epoch_days_2 = make_day(later.iso_year(), later.iso_month() - 1, later.iso_day());
|
||||
|
||||
// 4. Assert: epochDays2 is finite.
|
||||
VERIFY(isfinite(epoch_days_2));
|
||||
|
||||
// 5. Return ℝ(epochDays2) - ℝ(epochDays1).
|
||||
return epoch_days_2 - epoch_days_1;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue