/* * Copyright (c) 2021-2023, Linus Groh * Copyright (c) 2024, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace JS::Temporal { struct TimeZone { Optional name; Optional offset_minutes; }; JS_API ISODateTime get_iso_parts_from_epoch(Crypto::SignedBigInteger const& epoch_nanoseconds); JS_API Optional get_named_time_zone_next_transition(StringView time_zone, Crypto::SignedBigInteger const& epoch_nanoseconds); JS_API Optional get_named_time_zone_previous_transition(StringView time_zone, Crypto::SignedBigInteger const& epoch_nanoseconds); JS_API String format_offset_time_zone_identifier(i64 offset_minutes, Optional = {}); JS_API String format_utc_offset_nanoseconds(i64 offset_nanoseconds); JS_API String format_date_time_utc_offset_rounded(i64 offset_nanoseconds); JS_API ThrowCompletionOr to_temporal_time_zone_identifier(VM&, Value temporal_time_zone_like); JS_API i64 get_offset_nanoseconds_for(StringView time_zone, Crypto::SignedBigInteger const& epoch_nanoseconds); JS_API ISODateTime get_iso_date_time_for(StringView time_zone, Crypto::SignedBigInteger const& epoch_nanoseconds); JS_API ThrowCompletionOr to_temporal_time_zone_identifier(VM&, StringView temporal_time_zone_like); JS_API ThrowCompletionOr get_epoch_nanoseconds_for(VM&, StringView time_zone, ISODateTime const&, Disambiguation); JS_API ThrowCompletionOr disambiguate_possible_epoch_nanoseconds(VM&, Vector possible_epoch_ns, StringView time_zone, ISODateTime const&, Disambiguation); JS_API ThrowCompletionOr> get_possible_epoch_nanoseconds(VM&, StringView time_zone, ISODateTime const&); JS_API ThrowCompletionOr get_start_of_day(VM&, StringView time_zone, ISODate); JS_API bool time_zone_equals(StringView one, StringView two); JS_API ThrowCompletionOr parse_time_zone_identifier(VM&, StringView identifier); JS_API TimeZone parse_time_zone_identifier(StringView identifier); JS_API TimeZone parse_time_zone_identifier(ParseResult const&); }