/** * @since 3.6.0 */ import type { IllegalArgumentError } from "./Cause.ts"; import * as Context from "./Context.ts"; import type * as Duration from "./Duration.ts"; import * as Effect from "./Effect.ts"; import type * as Equ from "./Equivalence.ts"; import { type LazyArg } from "./Function.ts"; import type { Inspectable } from "./Inspectable.ts"; import * as Layer from "./Layer.ts"; import type * as Option from "./Option.ts"; import type * as order from "./Order.ts"; import type { Pipeable } from "./Pipeable.ts"; declare const TypeId = "~effect/time/DateTime"; declare const TimeZoneTypeId = "~effect/time/DateTime/TimeZone"; /** * A `DateTime` represents a point in time. It can optionally have a time zone * associated with it. * * @since 3.6.0 * @category models */ export type DateTime = Utc | Zoned; /** * @since 3.6.0 * @category models */ export interface Utc extends DateTime.Proto { readonly _tag: "Utc"; readonly epochMilliseconds: number; partsUtc: DateTime.PartsWithWeekday | undefined; } /** * @since 3.6.0 * @category models */ export interface Zoned extends DateTime.Proto { readonly _tag: "Zoned"; readonly epochMilliseconds: number; readonly zone: TimeZone; adjustedEpochMilliseconds: number | undefined; partsAdjusted: DateTime.PartsWithWeekday | undefined; partsUtc: DateTime.PartsWithWeekday | undefined; } /** * @since 3.6.0 * @category models */ export declare namespace DateTime { /** * @since 3.6.0 * @category models */ type Input = DateTime | Partial | Instant | InstantWithZone | Date | number | string; /** * @since 3.6.0 * @category models */ type PreserveZone = A extends Zoned ? Zoned : Utc; /** * @since 3.6.0 * @category models */ type Unit = UnitSingular | UnitPlural; /** * @since 3.6.0 * @category models */ type UnitSingular = "millisecond" | "second" | "minute" | "hour" | "day" | "week" | "month" | "year"; /** * @since 3.6.0 * @category models */ type UnitPlural = "milliseconds" | "seconds" | "minutes" | "hours" | "days" | "weeks" | "months" | "years"; /** * @since 3.6.0 * @category models */ interface PartsWithWeekday { readonly millisecond: number; readonly second: number; readonly minute: number; readonly hour: number; readonly day: number; readonly weekDay: number; readonly month: number; readonly year: number; } /** * @since 3.6.0 * @category models */ interface Parts { readonly millisecond: number; readonly second: number; readonly minute: number; readonly hour: number; readonly day: number; readonly month: number; readonly year: number; } /** * @since 3.6.0 * @category models */ interface PartsForMath { readonly milliseconds: number; readonly seconds: number; readonly minutes: number; readonly hours: number; readonly days: number; readonly weeks: number; readonly months: number; readonly years: number; } /** * @since 4.0.0 * @category models */ interface Instant { readonly epochMilliseconds: number; } /** * @since 4.0.0 * @category models */ interface InstantWithZone { readonly timeZoneId: string; readonly epochMilliseconds: number; } /** * @since 3.6.0 * @category models */ interface Proto extends Pipeable, Inspectable { readonly [TypeId]: typeof TypeId; } } /** * @since 3.6.0 * @category models */ export type TimeZone = TimeZone.Offset | TimeZone.Named; /** * @since 3.6.0 * @category models */ export declare namespace TimeZone { /** * @since 3.6.0 * @category models */ interface Proto extends Inspectable { readonly [TimeZoneTypeId]: typeof TimeZoneTypeId; } /** * @since 3.6.0 * @category models */ interface Offset extends Proto { readonly _tag: "Offset"; readonly offset: number; } /** * @since 3.6.0 * @category models */ interface Named extends Proto { readonly _tag: "Named"; readonly id: string; } } /** * A `Disambiguation` is used to resolve ambiguities when a `DateTime` is * ambiguous, such as during a daylight saving time transition. * * For more information, see the [Temporal documentation](https://tc39.es/proposal-temporal/docs/timezone.html#ambiguity-due-to-dst-or-other-time-zone-offset-changes) * * - `"compatible"`: (default) Behavior matching Temporal API and legacy JavaScript Date and moment.js. * For repeated times, chooses the earlier occurrence. For gap times, chooses the later interpretation. * * - `"earlier"`: For repeated times, always choose the earlier occurrence. * For gap times, choose the time before the gap. * * - `"later"`: For repeated times, always choose the later occurrence. * For gap times, choose the time after the gap. * * - `"reject"`: Throw an `RangeError` when encountering ambiguous or non-existent times. * * @example * ```ts * import { DateTime } from "effect" * * // Fall-back example: 01:30 on Nov 2, 2025 in New York happens twice * const ambiguousTime = { year: 2025, month: 11, day: 2, hours: 1, minutes: 30 } * const timeZone = DateTime.zoneMakeNamedUnsafe("America/New_York") * * DateTime.makeZoned(ambiguousTime, { * timeZone, * adjustForTimeZone: true, * disambiguation: "earlier" * }) * // Earlier occurrence (DST time): 2025-11-02T05:30:00.000Z * * DateTime.makeZoned(ambiguousTime, { * timeZone, * adjustForTimeZone: true, * disambiguation: "later" * }) * // Later occurrence (standard time): 2025-11-02T06:30:00.000Z * * // Gap example: 02:30 on Mar 9, 2025 in New York doesn't exist * const gapTime = { year: 2025, month: 3, day: 9, hours: 2, minutes: 30 } * * DateTime.makeZoned(gapTime, { * timeZone, * adjustForTimeZone: true, * disambiguation: "earlier" * }) * // Time before gap: 2025-03-09T06:30:00.000Z (01:30 EST) * * DateTime.makeZoned(gapTime, { * timeZone, * adjustForTimeZone: true, * disambiguation: "later" * }) * // Time after gap: 2025-03-09T07:30:00.000Z (03:30 EDT) * ``` * * @since 3.18.0 * @category models */ export type Disambiguation = "compatible" | "earlier" | "later" | "reject"; /** * @since 3.6.0 * @category guards */ export declare const isDateTime: (u: unknown) => u is DateTime; /** * Checks if a value is a `TimeZone`. * * @since 3.6.0 * @category guards */ export declare const isTimeZone: (u: unknown) => u is TimeZone; /** * Checks if a value is an offset-based `TimeZone`. * * @since 3.6.0 * @category guards */ export declare const isTimeZoneOffset: (u: unknown) => u is TimeZone.Offset; /** * Checks if a value is a named `TimeZone` (IANA time zone). * * @since 3.6.0 * @category guards */ export declare const isTimeZoneNamed: (u: unknown) => u is TimeZone.Named; /** * Checks if a `DateTime` is a UTC `DateTime` (no time zone information). * * @since 3.6.0 * @category guards */ export declare const isUtc: (self: DateTime) => self is Utc; /** * Checks if a `DateTime` is a zoned `DateTime` (has time zone information). * * @since 3.6.0 * @category guards */ export declare const isZoned: (self: DateTime) => self is Zoned; /** * An `Equivalence` for comparing two `DateTime` values for equality. * * Two `DateTime` values are considered equivalent if they represent the same * point in time, regardless of their time zone. * * @example * ```ts * import { DateTime } from "effect" * * const utc = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * console.log(DateTime.Equivalence(utc, zoned)) // true * ``` * * @category instances * @since 3.6.0 */ export declare const Equivalence: Equ.Equivalence; /** * An `Order` for comparing and sorting `DateTime` values. * * `DateTime` values are ordered by their epoch milliseconds, so earlier times * come before later times regardless of time zone. * * @example * ```ts * import { Array, DateTime } from "effect" * * const dates = [ * DateTime.makeUnsafe("2024-03-01"), * DateTime.makeUnsafe("2024-01-01"), * DateTime.makeUnsafe("2024-02-01") * ] * * const sorted = Array.sort(dates, DateTime.Order) * // Results in chronological order: 2024-01-01, 2024-02-01, 2024-03-01 * ``` * * @category instances * @since 3.6.0 */ export declare const Order: order.Order; /** * Clamp a `DateTime` between a minimum and maximum value. * * If the `DateTime` is before the minimum, the minimum is returned. * If the `DateTime` is after the maximum, the maximum is returned. * Otherwise, the original `DateTime` is returned. * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2025-06-15") * * const clamped = DateTime.clamp(date, { minimum: min, maximum: max }) * // clamped equals max (2024-12-31) * ``` * * @category instances * @since 3.6.0 */ export declare const clamp: { /** * Clamp a `DateTime` between a minimum and maximum value. * * If the `DateTime` is before the minimum, the minimum is returned. * If the `DateTime` is after the maximum, the maximum is returned. * Otherwise, the original `DateTime` is returned. * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2025-06-15") * * const clamped = DateTime.clamp(date, { minimum: min, maximum: max }) * // clamped equals max (2024-12-31) * ``` * * @category instances * @since 3.6.0 */ (options: { readonly minimum: Min; readonly maximum: Max; }): (self: A) => A | Min | Max; /** * Clamp a `DateTime` between a minimum and maximum value. * * If the `DateTime` is before the minimum, the minimum is returned. * If the `DateTime` is after the maximum, the maximum is returned. * Otherwise, the original `DateTime` is returned. * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2025-06-15") * * const clamped = DateTime.clamp(date, { minimum: min, maximum: max }) * // clamped equals max (2024-12-31) * ``` * * @category instances * @since 3.6.0 */ (self: A, options: { readonly minimum: Min; readonly maximum: Max; }): A | Min | Max; }; /** * Create a `DateTime` from a `Date`. * * If the `Date` is invalid, an `IllegalArgumentError` will be thrown. * * @example * ```ts * import { DateTime } from "effect" * * const date = new Date("2024-01-01T12:00:00Z") * const dateTime = DateTime.fromDateUnsafe(date) * * console.log(DateTime.formatIso(dateTime)) // "2024-01-01T12:00:00.000Z" * ``` * * @category constructors * @since 3.6.0 */ export declare const fromDateUnsafe: (date: Date) => Utc; /** * Create a `DateTime` from one of the following: * * - A `DateTime` * - A `Date` instance (invalid dates will throw an `IllegalArgumentError`) * - The `number` of milliseconds since the Unix epoch * - An object with the parts of a date * - A `string` that can be parsed by `Date.parse` * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime } from "effect" * * // from Date * DateTime.makeUnsafe(new Date()) * * // from parts * DateTime.makeUnsafe({ year: 2024 }) * * // from string * DateTime.makeUnsafe("2024-01-01") * ``` */ export declare const makeUnsafe: (input: A) => DateTime.PreserveZone; /** * Create a `DateTime.Zoned` using `DateTime.makeUnsafe` and a time zone. * * The input is treated as UTC and then the time zone is attached, unless * `adjustForTimeZone` is set to `true`. In that case, the input is treated as * already in the time zone. * * When `adjustForTimeZone` is true and ambiguous times occur during DST transitions, * the `disambiguation` option controls how to resolve the ambiguity: * - `compatible` (default): Choose earlier time for repeated times, later for gaps * - `earlier`: Always choose the earlier of two possible times * - `later`: Always choose the later of two possible times * - `reject`: Throw an error when ambiguous times are encountered * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime } from "effect" * * DateTime.makeZonedUnsafe(new Date(), { timeZone: "Europe/London" }) * ``` */ export declare const makeZonedUnsafe: (input: DateTime.Input, options?: { readonly timeZone?: number | string | TimeZone | undefined; readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }) => Zoned; /** * Create a `DateTime.Zoned` using `DateTime.make` and a time zone. * * The input is treated as UTC and then the time zone is attached, unless * `adjustForTimeZone` is set to `true`. In that case, the input is treated as * already in the time zone. * * When `adjustForTimeZone` is true and ambiguous times occur during DST transitions, * the `disambiguation` option controls how to resolve the ambiguity: * - `compatible` (default): Choose earlier time for repeated times, later for gaps * - `earlier`: Always choose the earlier of two possible times * - `later`: Always choose the later of two possible times * - `reject`: Throw an error when ambiguous times are encountered * * If the date time input or time zone is invalid, `None` will be returned. * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime } from "effect" * * DateTime.makeZoned(new Date(), { timeZone: "Europe/London" }) * ``` */ export declare const makeZoned: (input: DateTime.Input, options?: { readonly timeZone?: number | string | TimeZone | undefined; readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }) => Option.Option; /** * Create a `DateTime` from one of the following: * * - A `DateTime` * - A `Date` instance (invalid dates will throw an `IllegalArgumentError`) * - The `number` of milliseconds since the Unix epoch * - An object with the parts of a date * - A `string` that can be parsed by `Date.parse` * * If the input is invalid, `None` will be returned. * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime } from "effect" * * // from Date * DateTime.make(new Date()) * * // from parts * DateTime.make({ year: 2024 }) * * // from string * DateTime.make("2024-01-01") * ``` */ export declare const make: (input: A) => Option.Option>; /** * Create a `DateTime.Zoned` from a string. * * It uses the format: `YYYY-MM-DDTHH:mm:ss.sss+HH:MM[Time/Zone]`. * * @example * ```ts * import { DateTime } from "effect" * * const result1 = DateTime.makeZonedFromString( * "2024-01-01T12:00:00+02:00[Europe/Berlin]" * ) * console.log(result1._tag === "Some") // true * * const result2 = DateTime.makeZonedFromString("2024-01-01T12:00:00Z") * console.log(result2._tag === "Some") // true * * const invalid = DateTime.makeZonedFromString("invalid") * console.log(invalid._tag === "None") // true * ``` * * @since 3.6.0 * @category constructors */ export declare const makeZonedFromString: (input: string) => Option.Option; /** * Get the current time using the `Clock` service and convert it to a `DateTime`. * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * }) * ``` */ export declare const now: Effect.Effect; /** * Get the current time using the `Clock` service and convert it to a `DateTime`. * * @since 3.6.0 * @category constructors * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * }) * ``` */ export declare const nowAsDate: Effect.Effect; /** * Get the current time using `Date.now`. * * This is a synchronous version of `now` that directly uses `Date.now()` * instead of the Effect `Clock` service. * * @example * ```ts * import { DateTime } from "effect" * * const now = DateTime.nowUnsafe() * console.log(DateTime.formatIso(now)) * ``` * * @category constructors * @since 3.6.0 */ export declare const nowUnsafe: LazyArg; /** * For a `DateTime` returns a new `DateTime.Utc`. * * @since 3.13.0 * @category time zones * @example * ```ts * import { DateTime } from "effect" * * const now = DateTime.makeZonedUnsafe({ year: 2024 }, { * timeZone: "Europe/London" * }) * * // set as UTC * const utc: DateTime.Utc = DateTime.toUtc(now) * ``` */ export declare const toUtc: (self: DateTime) => Utc; /** * Set the time zone of a `DateTime`, returning a new `DateTime.Zoned`. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * // set the time zone * const zoned: DateTime.Zoned = DateTime.setZone(now, zone) * }) * ``` */ export declare const setZone: { /** * Set the time zone of a `DateTime`, returning a new `DateTime.Zoned`. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * // set the time zone * const zoned: DateTime.Zoned = DateTime.setZone(now, zone) * }) * ``` */ (zone: TimeZone, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): (self: DateTime) => Zoned; /** * Set the time zone of a `DateTime`, returning a new `DateTime.Zoned`. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * // set the time zone * const zoned: DateTime.Zoned = DateTime.setZone(now, zone) * }) * ``` */ (self: DateTime, zone: TimeZone, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): Zoned; }; /** * Add a fixed offset time zone to a `DateTime`. * * The offset is in milliseconds. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * * // set the offset time zone in milliseconds * const zoned: DateTime.Zoned = DateTime.setZoneOffset(now, 3 * 60 * 60 * 1000) * }) * ``` */ export declare const setZoneOffset: { /** * Add a fixed offset time zone to a `DateTime`. * * The offset is in milliseconds. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * * // set the offset time zone in milliseconds * const zoned: DateTime.Zoned = DateTime.setZoneOffset(now, 3 * 60 * 60 * 1000) * }) * ``` */ (offset: number, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): (self: DateTime) => Zoned; /** * Add a fixed offset time zone to a `DateTime`. * * The offset is in milliseconds. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * * // set the offset time zone in milliseconds * const zoned: DateTime.Zoned = DateTime.setZoneOffset(now, 3 * 60 * 60 * 1000) * }) * ``` */ (self: DateTime, offset: number, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): Zoned; }; /** * Attempt to create a named time zone from a IANA time zone identifier. * * If the time zone is invalid, an `IllegalArgumentError` will be thrown. * * @example * ```ts * import { DateTime } from "effect" * * const londonZone = DateTime.zoneMakeNamedUnsafe("Europe/London") * console.log(DateTime.zoneToString(londonZone)) // "Europe/London" * * const tokyoZone = DateTime.zoneMakeNamedUnsafe("Asia/Tokyo") * console.log(DateTime.zoneToString(tokyoZone)) // "Asia/Tokyo" * * // This would throw an IllegalArgumentError: * // DateTime.zoneMakeNamedUnsafe("Invalid/Zone") * ``` * * @since 3.6.0 * @category time zones */ export declare const zoneMakeNamedUnsafe: (zoneId: string) => TimeZone.Named; /** * Create a fixed offset time zone. * * The offset is specified in milliseconds from UTC. Positive values are * ahead of UTC, negative values are behind UTC. * * @example * ```ts * import { DateTime } from "effect" * * // Create a time zone with +3 hours offset * const zone = DateTime.zoneMakeOffset(3 * 60 * 60 * 1000) * * const dt = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: zone * }) * ``` * * @category time zones * @since 3.6.0 */ export declare const zoneMakeOffset: (offset: number) => TimeZone.Offset; /** * Create a named time zone from a IANA time zone identifier. * * If the time zone is invalid, `None` will be returned. * * @example * ```ts * import { DateTime } from "effect" * * const validZone = DateTime.zoneMakeNamed("Europe/London") * console.log(validZone._tag === "Some") // true * * const invalidZone = DateTime.zoneMakeNamed("Invalid/Zone") * console.log(invalidZone._tag === "None") // true * ``` * * @category time zones * @since 3.6.0 */ export declare const zoneMakeNamed: (zoneId: string) => Option.Option; /** * Create a named time zone from a IANA time zone identifier. * * If the time zone is invalid, it will fail with an `IllegalArgumentError`. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const program = Effect.gen(function*() { * const zone = yield* DateTime.zoneMakeNamedEffect("Europe/London") * const now = yield* DateTime.now * return DateTime.setZone(now, zone) * }) * ``` * * @category time zones * @since 3.6.0 */ export declare const zoneMakeNamedEffect: (zoneId: string) => Effect.Effect; /** * Create a named time zone from the system's local time zone. * * This uses the system's configured time zone, which may vary depending * on the runtime environment. * * @example * ```ts * import { DateTime } from "effect" * * const localZone = DateTime.zoneMakeLocal() * const now = DateTime.nowUnsafe() * const localTime = DateTime.setZone(now, localZone) * * console.log(DateTime.formatIsoZoned(localTime)) * ``` * * @category time zones * @since 3.6.0 */ export declare const zoneMakeLocal: () => TimeZone.Named; /** * Try to parse a `TimeZone` from a string. * * Supports both IANA time zone identifiers and offset formats like "+03:00". * * @example * ```ts * import { DateTime } from "effect" * * const namedZone = DateTime.zoneFromString("Europe/London") * const offsetZone = DateTime.zoneFromString("+03:00") * const invalid = DateTime.zoneFromString("invalid") * * console.log(namedZone._tag === "Some") // true * console.log(offsetZone._tag === "Some") // true * console.log(invalid._tag === "None") // true * ``` * * @category time zones * @since 3.6.0 */ export declare const zoneFromString: (zone: string) => Option.Option; /** * Format a `TimeZone` as a string. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime } from "effect" * * // Outputs "+03:00" * DateTime.zoneToString(DateTime.zoneMakeOffset(3 * 60 * 60 * 1000)) * * // Outputs "Europe/London" * DateTime.zoneToString(DateTime.zoneMakeNamedUnsafe("Europe/London")) * ``` */ export declare const zoneToString: (self: TimeZone) => string; /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, `None` will be returned. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone, returns an Option * DateTime.setZoneNamed(now, "Europe/London") * }) * ``` */ export declare const setZoneNamed: { /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, `None` will be returned. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone, returns an Option * DateTime.setZoneNamed(now, "Europe/London") * }) * ``` */ (zoneId: string, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): (self: DateTime) => Option.Option; /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, `None` will be returned. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone, returns an Option * DateTime.setZoneNamed(now, "Europe/London") * }) * ``` */ (self: DateTime, zoneId: string, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): Option.Option; }; /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, an `IllegalArgumentError` will be thrown. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone * DateTime.setZoneNamedUnsafe(now, "Europe/London") * }) * ``` */ export declare const setZoneNamedUnsafe: { /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, an `IllegalArgumentError` will be thrown. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone * DateTime.setZoneNamedUnsafe(now, "Europe/London") * }) * ``` */ (zoneId: string, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): (self: DateTime) => Zoned; /** * Set the time zone of a `DateTime` from an IANA time zone identifier. If the * time zone is invalid, an `IllegalArgumentError` will be thrown. * * @since 3.6.0 * @category time zones * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * // set the time zone * DateTime.setZoneNamedUnsafe(now, "Europe/London") * }) * ``` */ (self: DateTime, zoneId: string, options?: { readonly adjustForTimeZone?: boolean | undefined; readonly disambiguation?: Disambiguation | undefined; }): Zoned; }; /** * Calulate the difference between two `DateTime` values, returning a * `Duration` representing the amount of time between them. * * If `other` is *after* `self`, the result will be a positive `Duration`. If * `other` is *before* `self`, the result will be a negative `Duration`. If they * are equal, the result will be a `Duration` of zero. * * @since 3.6.0 * @category comparisons * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const other = DateTime.add(now, { minutes: 1 }) * * // returns Duration.minutes(1) * DateTime.distance(now, other) * }) * ``` */ export declare const distance: { /** * Calulate the difference between two `DateTime` values, returning a * `Duration` representing the amount of time between them. * * If `other` is *after* `self`, the result will be a positive `Duration`. If * `other` is *before* `self`, the result will be a negative `Duration`. If they * are equal, the result will be a `Duration` of zero. * * @since 3.6.0 * @category comparisons * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const other = DateTime.add(now, { minutes: 1 }) * * // returns Duration.minutes(1) * DateTime.distance(now, other) * }) * ``` */ (other: DateTime): (self: DateTime) => Duration.Duration; /** * Calulate the difference between two `DateTime` values, returning a * `Duration` representing the amount of time between them. * * If `other` is *after* `self`, the result will be a positive `Duration`. If * `other` is *before* `self`, the result will be a negative `Duration`. If they * are equal, the result will be a `Duration` of zero. * * @since 3.6.0 * @category comparisons * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * const other = DateTime.add(now, { minutes: 1 }) * * // returns Duration.minutes(1) * DateTime.distance(now, other) * }) * ``` */ (self: DateTime, other: DateTime): Duration.Duration; }; /** * Returns the earlier of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const earlier = DateTime.min(date1, date2) * // earlier equals date1 (2024-01-01) * ``` * * @category comparisons * @since 3.6.0 */ export declare const min: { /** * Returns the earlier of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const earlier = DateTime.min(date1, date2) * // earlier equals date1 (2024-01-01) * ``` * * @category comparisons * @since 3.6.0 */ (that: That): (self: Self) => Self | That; /** * Returns the earlier of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const earlier = DateTime.min(date1, date2) * // earlier equals date1 (2024-01-01) * ``` * * @category comparisons * @since 3.6.0 */ (self: Self, that: That): Self | That; }; /** * Returns the later of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const later = DateTime.max(date1, date2) * // later equals date2 (2024-02-01) * ``` * * @category comparisons * @since 3.6.0 */ export declare const max: { /** * Returns the later of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const later = DateTime.max(date1, date2) * // later equals date2 (2024-02-01) * ``` * * @category comparisons * @since 3.6.0 */ (that: That): (self: Self) => Self | That; /** * Returns the later of two `DateTime` values. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * const later = DateTime.max(date1, date2) * // later equals date2 (2024-02-01) * ``` * * @category comparisons * @since 3.6.0 */ (self: Self, that: That): Self | That; }; /** * Checks if the first `DateTime` is after the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-02-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * * console.log(DateTime.isGreaterThan(date1, date2)) // true * console.log(DateTime.isGreaterThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isGreaterThan: { /** * Checks if the first `DateTime` is after the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-02-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * * console.log(DateTime.isGreaterThan(date1, date2)) // true * console.log(DateTime.isGreaterThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (that: DateTime): (self: DateTime) => boolean; /** * Checks if the first `DateTime` is after the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-02-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * * console.log(DateTime.isGreaterThan(date1, date2)) // true * console.log(DateTime.isGreaterThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (self: DateTime, that: DateTime): boolean; }; /** * Checks if the first `DateTime` is after or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isGreaterThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date3, date1)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date1, date3)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isGreaterThanOrEqualTo: { /** * Checks if the first `DateTime` is after or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isGreaterThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date3, date1)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date1, date3)) // false * ``` * * @category comparisons * @since 3.6.0 */ (that: DateTime): (self: DateTime) => boolean; /** * Checks if the first `DateTime` is after or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isGreaterThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date3, date1)) // true * console.log(DateTime.isGreaterThanOrEqualTo(date1, date3)) // false * ``` * * @category comparisons * @since 3.6.0 */ (self: DateTime, that: DateTime): boolean; }; /** * Checks if the first `DateTime` is before the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThan(date1, date2)) // true * console.log(DateTime.isLessThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isLessThan: { /** * Checks if the first `DateTime` is before the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThan(date1, date2)) // true * console.log(DateTime.isLessThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (that: DateTime): (self: DateTime) => boolean; /** * Checks if the first `DateTime` is before the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThan(date1, date2)) // true * console.log(DateTime.isLessThan(date2, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (self: DateTime, that: DateTime): boolean; }; /** * Checks if the first `DateTime` is before or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isLessThanOrEqualTo(date1, date3)) // true * console.log(DateTime.isLessThanOrEqualTo(date3, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isLessThanOrEqualTo: { /** * Checks if the first `DateTime` is before or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isLessThanOrEqualTo(date1, date3)) // true * console.log(DateTime.isLessThanOrEqualTo(date3, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (that: DateTime): (self: DateTime) => boolean; /** * Checks if the first `DateTime` is before or equal to the second `DateTime`. * * @example * ```ts * import { DateTime } from "effect" * * const date1 = DateTime.makeUnsafe("2024-01-01") * const date2 = DateTime.makeUnsafe("2024-01-01") * const date3 = DateTime.makeUnsafe("2024-02-01") * * console.log(DateTime.isLessThanOrEqualTo(date1, date2)) // true * console.log(DateTime.isLessThanOrEqualTo(date1, date3)) // true * console.log(DateTime.isLessThanOrEqualTo(date3, date1)) // false * ``` * * @category comparisons * @since 3.6.0 */ (self: DateTime, that: DateTime): boolean; }; /** * Checks if a `DateTime` is between two other `DateTime` values (inclusive). * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2024-06-15") * * console.log(DateTime.between(date, { minimum: min, maximum: max })) // true * ``` * * @category comparisons * @since 3.6.0 */ export declare const between: { /** * Checks if a `DateTime` is between two other `DateTime` values (inclusive). * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2024-06-15") * * console.log(DateTime.between(date, { minimum: min, maximum: max })) // true * ``` * * @category comparisons * @since 3.6.0 */ (options: { minimum: DateTime; maximum: DateTime; }): (self: DateTime) => boolean; /** * Checks if a `DateTime` is between two other `DateTime` values (inclusive). * * @example * ```ts * import { DateTime } from "effect" * * const min = DateTime.makeUnsafe("2024-01-01") * const max = DateTime.makeUnsafe("2024-12-31") * const date = DateTime.makeUnsafe("2024-06-15") * * console.log(DateTime.between(date, { minimum: min, maximum: max })) // true * ``` * * @category comparisons * @since 3.6.0 */ (self: DateTime, options: { minimum: DateTime; maximum: DateTime; }): boolean; }; /** * Checks if a `DateTime` is in the future compared to the current time. * * This is an effectful operation that uses the current time from the `Clock` service. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const program = Effect.gen(function*() { * const futureDate = DateTime.add(yield* DateTime.now, { hours: 1 }) * const isFuture = yield* DateTime.isFuture(futureDate) * console.log(isFuture) // true * }) * ``` * * @category comparisons * @since 3.6.0 */ export declare const isFuture: (self: DateTime) => Effect.Effect; /** * Checks if a `DateTime` is in the future compared to the current time. * * This is a synchronous version that uses `Date.now()` directly. * * @example * ```ts * import { DateTime } from "effect" * * const now = DateTime.nowUnsafe() * const futureDate = DateTime.add(now, { hours: 1 }) * * console.log(DateTime.isFutureUnsafe(futureDate)) // true * console.log(DateTime.isFutureUnsafe(now)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isFutureUnsafe: (self: DateTime) => boolean; /** * Checks if a `DateTime` is in the past compared to the current time. * * This is an effectful operation that uses the current time from the `Clock` service. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const program = Effect.gen(function*() { * const pastDate = DateTime.subtract(yield* DateTime.now, { hours: 1 }) * const isPast = yield* DateTime.isPast(pastDate) * console.log(isPast) // true * }) * ``` * * @category comparisons * @since 3.6.0 */ export declare const isPast: (self: DateTime) => Effect.Effect; /** * Checks if a `DateTime` is in the past compared to the current time. * * This is a synchronous version that uses `Date.now()` directly. * * @example * ```ts * import { DateTime } from "effect" * * const now = DateTime.nowUnsafe() * const pastDate = DateTime.subtract(now, { hours: 1 }) * * console.log(DateTime.isPastUnsafe(pastDate)) // true * console.log(DateTime.isPastUnsafe(now)) // false * ``` * * @category comparisons * @since 3.6.0 */ export declare const isPastUnsafe: (self: DateTime) => boolean; /** * Get the UTC `Date` of a `DateTime`. * * This always returns the UTC representation, ignoring any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * const utcDate = DateTime.toDateUtc(dt) * console.log(utcDate.toISOString()) // "2024-01-01T12:00:00.000Z" * ``` * * @category conversions * @since 3.6.0 */ export declare const toDateUtc: (self: DateTime) => Date; /** * Convert a `DateTime` to a `Date`, applying the time zone first. * * For `DateTime.Zoned`, this adjusts for the time zone before converting. * For `DateTime.Utc`, this is equivalent to `toDateUtc`. * * @example * ```ts * import { DateTime } from "effect" * * const utc = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * console.log(DateTime.toDate(utc).toISOString()) * console.log(DateTime.toDate(zoned).toISOString()) * ``` * * @category conversions * @since 3.6.0 */ export declare const toDate: (self: DateTime) => Date; /** * Calculate the time zone offset of a `DateTime.Zoned` in milliseconds. * * Returns the offset from UTC in milliseconds. Positive values indicate * time zones ahead of UTC, negative values indicate time zones behind UTC. * * @example * ```ts * import { DateTime } from "effect" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * const offset = DateTime.zonedOffset(zoned) * console.log(offset) // 0 (London is UTC+0 in winter) * ``` * * @category conversions * @since 3.6.0 */ export declare const zonedOffset: (self: Zoned) => number; /** * Format the time zone offset of a `DateTime.Zoned` as an ISO string. * * The offset is formatted as "±HH:MM". * * @example * ```ts * import { DateTime } from "effect" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: DateTime.zoneMakeOffset(3 * 60 * 60 * 1000) // +3 hours * }) * * const offsetString = DateTime.zonedOffsetIso(zoned) * console.log(offsetString) // "+03:00" * ``` * * @category conversions * @since 3.6.0 */ export declare const zonedOffsetIso: (self: Zoned) => string; /** * Get the milliseconds since the Unix epoch of a `DateTime`. * * This returns the UTC timestamp regardless of any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T00:00:00Z") * const epochMillis = DateTime.toEpochMillis(dt) * * console.log(epochMillis) // 1704067200000 * console.log(new Date(epochMillis).toISOString()) // "2024-01-01T00:00:00.000Z" * ``` * * @category conversions * @since 3.6.0 */ export declare const toEpochMillis: (self: DateTime) => number; /** * Remove the time aspect of a `DateTime`, first adjusting for the time * zone. It will return a `DateTime.Utc` only containing the date. * * @since 3.6.0 * @category conversions * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T00:00:00Z" * DateTime.makeZonedUnsafe("2024-01-01T05:00:00Z", { * timeZone: "Pacific/Auckland", * adjustForTimeZone: true * }).pipe( * DateTime.removeTime, * DateTime.formatIso * ) * ``` */ export declare const removeTime: (self: DateTime) => Utc; /** * Get the different parts of a `DateTime` as an object. * * The parts will be time zone adjusted if the `DateTime` is zoned. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:30:45.123Z") * const parts = DateTime.toParts(dt) * * console.log(parts) * // { * // year: 2024, * // month: 1, * // day: 1, * // hours: 12, * // minutes: 30, * // seconds: 45, * // millis: 123, * // weekDay: 1 // Monday * // } * ``` * * @category parts * @since 3.6.0 */ export declare const toParts: (self: DateTime) => DateTime.PartsWithWeekday; /** * Get the different parts of a `DateTime` as an object. * * The parts will always be in UTC, ignoring any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:30:45.123Z", { * timeZone: "Europe/London" * }) * const parts = DateTime.toPartsUtc(zoned) * * console.log(parts) * // Always returns UTC parts regardless of time zone * ``` * * @category parts * @since 3.6.0 */ export declare const toPartsUtc: (self: DateTime) => DateTime.PartsWithWeekday; /** * Get a part of a `DateTime` as a number. * * The part will be in the UTC time zone. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeUnsafe({ year: 2024 }) * const year = DateTime.getPartUtc(now, "year") * assert.strictEqual(year, 2024) * ``` */ export declare const getPartUtc: { /** * Get a part of a `DateTime` as a number. * * The part will be in the UTC time zone. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeUnsafe({ year: 2024 }) * const year = DateTime.getPartUtc(now, "year") * assert.strictEqual(year, 2024) * ``` */ (part: keyof DateTime.PartsWithWeekday): (self: DateTime) => number; /** * Get a part of a `DateTime` as a number. * * The part will be in the UTC time zone. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeUnsafe({ year: 2024 }) * const year = DateTime.getPartUtc(now, "year") * assert.strictEqual(year, 2024) * ``` */ (self: DateTime, part: keyof DateTime.PartsWithWeekday): number; }; /** * Get a part of a `DateTime` as a number. * * The part will be time zone adjusted. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeZonedUnsafe({ year: 2024 }, { * timeZone: "Europe/London" * }) * const year = DateTime.getPart(now, "year") * assert.strictEqual(year, 2024) * ``` */ export declare const getPart: { /** * Get a part of a `DateTime` as a number. * * The part will be time zone adjusted. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeZonedUnsafe({ year: 2024 }, { * timeZone: "Europe/London" * }) * const year = DateTime.getPart(now, "year") * assert.strictEqual(year, 2024) * ``` */ (part: keyof DateTime.PartsWithWeekday): (self: DateTime) => number; /** * Get a part of a `DateTime` as a number. * * The part will be time zone adjusted. * * @since 3.6.0 * @category parts * @example * ```ts * import { DateTime } from "effect" * import * as assert from "node:assert" * * const now = DateTime.makeZonedUnsafe({ year: 2024 }, { * timeZone: "Europe/London" * }) * const year = DateTime.getPart(now, "year") * assert.strictEqual(year, 2024) * ``` */ (self: DateTime, part: keyof DateTime.PartsWithWeekday): number; }; /** * Set the different parts of a `DateTime` as an object. * * The date will be time zone adjusted for `DateTime.Zoned`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setParts(dt, { * year: 2025, * month: 6, * day: 15 * }) * * console.log(DateTime.formatIso(updated)) // "2025-06-15T12:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ export declare const setParts: { /** * Set the different parts of a `DateTime` as an object. * * The date will be time zone adjusted for `DateTime.Zoned`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setParts(dt, { * year: 2025, * month: 6, * day: 15 * }) * * console.log(DateTime.formatIso(updated)) // "2025-06-15T12:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ (parts: Partial): (self: A) => A; /** * Set the different parts of a `DateTime` as an object. * * The date will be time zone adjusted for `DateTime.Zoned`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setParts(dt, { * year: 2025, * month: 6, * day: 15 * }) * * console.log(DateTime.formatIso(updated)) // "2025-06-15T12:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ (self: A, parts: Partial): A; }; /** * Set the different parts of a `DateTime` as an object. * * The parts are always interpreted as UTC, ignoring any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setPartsUtc(dt, { * year: 2025, * hour: 18 * }) * * console.log(DateTime.formatIso(updated)) // "2025-01-01T18:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ export declare const setPartsUtc: { /** * Set the different parts of a `DateTime` as an object. * * The parts are always interpreted as UTC, ignoring any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setPartsUtc(dt, { * year: 2025, * hour: 18 * }) * * console.log(DateTime.formatIso(updated)) // "2025-01-01T18:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ (parts: Partial): (self: A) => A; /** * Set the different parts of a `DateTime` as an object. * * The parts are always interpreted as UTC, ignoring any time zone information. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * const updated = DateTime.setPartsUtc(dt, { * year: 2025, * hour: 18 * }) * * console.log(DateTime.formatIso(updated)) // "2025-01-01T18:00:00.000Z" * ``` * * @category parts * @since 3.6.0 */ (self: A, parts: Partial): A; }; declare const CurrentTimeZone_base: Context.ServiceClass; /** * @example * ```ts * import { DateTime, Effect } from "effect" * * const program = Effect.gen(function*() { * // Access the current time zone service * const zone = yield* DateTime.CurrentTimeZone * console.log(DateTime.zoneToString(zone)) * }) * * // Provide a time zone * const layer = DateTime.layerCurrentZoneNamed("Europe/London") * Effect.provide(program, layer) * ``` * * @since 3.11.0 * @category current time zone */ export declare class CurrentTimeZone extends CurrentTimeZone_base { } /** * Set the time zone of a `DateTime` to the current time zone, which is * determined by the `CurrentTimeZone` service. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * const now = yield* DateTime.now * * // set the time zone to "Europe/London" * const zoned = yield* DateTime.setZoneCurrent(now) * }).pipe(DateTime.withCurrentZoneNamed("Europe/London")) * ``` */ export declare const setZoneCurrent: (self: DateTime) => Effect.Effect; /** * Provide the `CurrentTimeZone` to an effect. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZone(zone)) * ``` */ export declare const withCurrentZone: { /** * Provide the `CurrentTimeZone` to an effect. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZone(zone)) * ``` */ (value: TimeZone): (self: Effect.Effect) => Effect.Effect>; /** * Provide the `CurrentTimeZone` to an effect. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * * Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZone(zone)) * ``` */ (self: Effect.Effect, value: TimeZone): Effect.Effect>; }; /** * Provide the `CurrentTimeZone` to an effect, using the system's local time * zone. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the system's local time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneLocal) * ``` */ export declare const withCurrentZoneLocal: (effect: Effect.Effect) => Effect.Effect>; /** * Provide the `CurrentTimeZone` to an effect, using a offset. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the system's local time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneOffset(3 * 60 * 60 * 1000)) * ``` */ export declare const withCurrentZoneOffset: { /** * Provide the `CurrentTimeZone` to an effect, using a offset. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the system's local time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneOffset(3 * 60 * 60 * 1000)) * ``` */ (offset: number): (effect: Effect.Effect) => Effect.Effect>; /** * Provide the `CurrentTimeZone` to an effect, using a offset. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the system's local time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneOffset(3 * 60 * 60 * 1000)) * ``` */ (effect: Effect.Effect, offset: number): Effect.Effect>; }; /** * Provide the `CurrentTimeZone` to an effect using an IANA time zone * identifier. * * If the time zone is invalid, it will fail with an `IllegalArgumentError`. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the "Europe/London" time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneNamed("Europe/London")) * ``` */ export declare const withCurrentZoneNamed: { /** * Provide the `CurrentTimeZone` to an effect using an IANA time zone * identifier. * * If the time zone is invalid, it will fail with an `IllegalArgumentError`. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the "Europe/London" time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneNamed("Europe/London")) * ``` */ (zone: string): (effect: Effect.Effect) => Effect.Effect>; /** * Provide the `CurrentTimeZone` to an effect using an IANA time zone * identifier. * * If the time zone is invalid, it will fail with an `IllegalArgumentError`. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the "Europe/London" time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneNamed("Europe/London")) * ``` */ (effect: Effect.Effect, zone: string): Effect.Effect>; }; /** * Get the current time as a `DateTime.Zoned`, using the `CurrentTimeZone`. * * @since 3.6.0 * @category current time zone * @example * ```ts * import { DateTime, Effect } from "effect" * * Effect.gen(function*() { * // will use the "Europe/London" time zone * const now = yield* DateTime.nowInCurrentZone * }).pipe(DateTime.withCurrentZoneNamed("Europe/London")) * ``` */ export declare const nowInCurrentZone: Effect.Effect; /** * Modify a `DateTime` by applying a function to a cloned `Date` instance. * * The `Date` will first have the time zone applied if possible, and then be * converted back to a `DateTime` within the same time zone. * * Supports `disambiguation` when the new wall clock time is ambiguous. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * * const modified = DateTime.mutate(dt, (date) => { * date.setHours(15) // Set to 3 PM * date.setMinutes(30) // Set to 30 minutes * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T15:30:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ export declare const mutate: { /** * Modify a `DateTime` by applying a function to a cloned `Date` instance. * * The `Date` will first have the time zone applied if possible, and then be * converted back to a `DateTime` within the same time zone. * * Supports `disambiguation` when the new wall clock time is ambiguous. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * * const modified = DateTime.mutate(dt, (date) => { * date.setHours(15) // Set to 3 PM * date.setMinutes(30) // Set to 30 minutes * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T15:30:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ (f: (date: Date) => void, options?: { readonly disambiguation?: Disambiguation | undefined; }): (self: A) => A; /** * Modify a `DateTime` by applying a function to a cloned `Date` instance. * * The `Date` will first have the time zone applied if possible, and then be * converted back to a `DateTime` within the same time zone. * * Supports `disambiguation` when the new wall clock time is ambiguous. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * * const modified = DateTime.mutate(dt, (date) => { * date.setHours(15) // Set to 3 PM * date.setMinutes(30) // Set to 30 minutes * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T15:30:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ (self: A, f: (date: Date) => void, options?: { readonly disambiguation?: Disambiguation | undefined; }): A; }; /** * Modify a `DateTime` by applying a function to a cloned UTC `Date` instance. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * const modified = DateTime.mutateUtc(dt, (date) => { * date.setUTCHours(18) // Set UTC time to 6 PM * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T18:00:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ export declare const mutateUtc: { /** * Modify a `DateTime` by applying a function to a cloned UTC `Date` instance. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * const modified = DateTime.mutateUtc(dt, (date) => { * date.setUTCHours(18) // Set UTC time to 6 PM * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T18:00:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ (f: (date: Date) => void): (self: A) => A; /** * Modify a `DateTime` by applying a function to a cloned UTC `Date` instance. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: "Europe/London" * }) * * const modified = DateTime.mutateUtc(dt, (date) => { * date.setUTCHours(18) // Set UTC time to 6 PM * }) * * console.log(DateTime.formatIso(modified)) // "2024-01-01T18:00:00.000Z" * ``` * * @since 3.6.0 * @category mapping */ (self: A, f: (date: Date) => void): A; }; /** * Transform a `DateTime` by applying a function to the number of milliseconds * since the Unix epoch. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // add 10 milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.mapEpochMillis((millis) => millis + 10) * ) * ``` */ export declare const mapEpochMillis: { /** * Transform a `DateTime` by applying a function to the number of milliseconds * since the Unix epoch. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // add 10 milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.mapEpochMillis((millis) => millis + 10) * ) * ``` */ (f: (millis: number) => number): (self: A) => A; /** * Transform a `DateTime` by applying a function to the number of milliseconds * since the Unix epoch. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // add 10 milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.mapEpochMillis((millis) => millis + 10) * ) * ``` */ (self: A, f: (millis: number) => number): A; }; /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the time zone adjusted date in milliseconds * DateTime.makeZonedUnsafe(0, { timeZone: "Europe/London" }).pipe( * DateTime.withDate((date) => date.getTime()) * ) * ``` */ export declare const withDate: { /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the time zone adjusted date in milliseconds * DateTime.makeZonedUnsafe(0, { timeZone: "Europe/London" }).pipe( * DateTime.withDate((date) => date.getTime()) * ) * ``` */ (f: (date: Date) => A): (self: DateTime) => A; /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the time zone adjusted date in milliseconds * DateTime.makeZonedUnsafe(0, { timeZone: "Europe/London" }).pipe( * DateTime.withDate((date) => date.getTime()) * ) * ``` */ (self: DateTime, f: (date: Date) => A): A; }; /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the date in milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.withDateUtc((date) => date.getTime()) * ) * ``` */ export declare const withDateUtc: { /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the date in milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.withDateUtc((date) => date.getTime()) * ) * ``` */ (f: (date: Date) => A): (self: DateTime) => A; /** * Using the time zone adjusted `Date`, apply a function to the `Date` and * return the result. * * @since 3.6.0 * @category mapping * @example * ```ts * import { DateTime } from "effect" * * // get the date in milliseconds * DateTime.makeUnsafe(0).pipe( * DateTime.withDateUtc((date) => date.getTime()) * ) * ``` */ (self: DateTime, f: (date: Date) => A): A; }; /** * Pattern match on a `DateTime` to handle `Utc` and `Zoned` cases differently. * * @example * ```ts * import { DateTime } from "effect" * * const dt1 = DateTime.nowUnsafe() // Utc * const dt2 = DateTime.makeZonedUnsafe(new Date(), { timeZone: "Europe/London" }) // Zoned * * const result1 = DateTime.match(dt1, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * * const result2 = DateTime.match(dt2, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * ``` * * @category mapping * @since 3.6.0 */ export declare const match: { /** * Pattern match on a `DateTime` to handle `Utc` and `Zoned` cases differently. * * @example * ```ts * import { DateTime } from "effect" * * const dt1 = DateTime.nowUnsafe() // Utc * const dt2 = DateTime.makeZonedUnsafe(new Date(), { timeZone: "Europe/London" }) // Zoned * * const result1 = DateTime.match(dt1, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * * const result2 = DateTime.match(dt2, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * ``` * * @category mapping * @since 3.6.0 */ (options: { readonly onUtc: (_: Utc) => A; readonly onZoned: (_: Zoned) => B; }): (self: DateTime) => A | B; /** * Pattern match on a `DateTime` to handle `Utc` and `Zoned` cases differently. * * @example * ```ts * import { DateTime } from "effect" * * const dt1 = DateTime.nowUnsafe() // Utc * const dt2 = DateTime.makeZonedUnsafe(new Date(), { timeZone: "Europe/London" }) // Zoned * * const result1 = DateTime.match(dt1, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * * const result2 = DateTime.match(dt2, { * onUtc: (utc) => `UTC: ${DateTime.formatIso(utc)}`, * onZoned: (zoned) => `Zoned: ${DateTime.formatIsoZoned(zoned)}` * }) * ``` * * @category mapping * @since 3.6.0 */ (self: DateTime, options: { readonly onUtc: (_: Utc) => A; readonly onZoned: (_: Zoned) => B; }): A | B; }; /** * Add the given `Duration` to a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.addDuration("5 minutes") * ) * ``` */ export declare const addDuration: { /** * Add the given `Duration` to a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.addDuration("5 minutes") * ) * ``` */ (duration: Duration.Input): (self: A) => A; /** * Add the given `Duration` to a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.addDuration("5 minutes") * ) * ``` */ (self: A, duration: Duration.Input): A; }; /** * Subtract the given `Duration` from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtractDuration("5 minutes") * ) * ``` */ export declare const subtractDuration: { /** * Subtract the given `Duration` from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtractDuration("5 minutes") * ) * ``` */ (duration: Duration.Input): (self: A) => A; /** * Subtract the given `Duration` from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtractDuration("5 minutes") * ) * ``` */ (self: A, duration: Duration.Input): A; }; /** * Add the given `amount` of `unit`'s to a `DateTime`. * * The time zone is taken into account when adding days, weeks, months, and * years. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.add({ minutes: 5 }) * ) * ``` */ export declare const add: { /** * Add the given `amount` of `unit`'s to a `DateTime`. * * The time zone is taken into account when adding days, weeks, months, and * years. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.add({ minutes: 5 }) * ) * ``` */ (parts: Partial): (self: A) => A; /** * Add the given `amount` of `unit`'s to a `DateTime`. * * The time zone is taken into account when adding days, weeks, months, and * years. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // add 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.add({ minutes: 5 }) * ) * ``` */ (self: A, parts: Partial): A; }; /** * Subtract the given `amount` of `unit`'s from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtract({ minutes: 5 }) * ) * ``` */ export declare const subtract: { /** * Subtract the given `amount` of `unit`'s from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtract({ minutes: 5 }) * ) * ``` */ (parts: Partial): (self: A) => A; /** * Subtract the given `amount` of `unit`'s from a `DateTime`. * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // subtract 5 minutes * DateTime.makeUnsafe(0).pipe( * DateTime.subtract({ minutes: 5 }) * ) * ``` */ (self: A, parts: Partial): A; }; /** * Converts a `DateTime` to the start of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.startOf("day"), * DateTime.formatIso * ) * ``` */ export declare const startOf: { /** * Converts a `DateTime` to the start of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.startOf("day"), * DateTime.formatIso * ) * ``` */ (part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): (self: A) => A; /** * Converts a `DateTime` to the start of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.startOf("day"), * DateTime.formatIso * ) * ``` */ (self: A, part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): A; }; /** * Converts a `DateTime` to the end of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T23:59:59.999Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.endOf("day"), * DateTime.formatIso * ) * ``` */ export declare const endOf: { /** * Converts a `DateTime` to the end of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T23:59:59.999Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.endOf("day"), * DateTime.formatIso * ) * ``` */ (part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): (self: A) => A; /** * Converts a `DateTime` to the end of the given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-01T23:59:59.999Z" * DateTime.makeUnsafe("2024-01-01T12:00:00Z").pipe( * DateTime.endOf("day"), * DateTime.formatIso * ) * ``` */ (self: A, part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): A; }; /** * Converts a `DateTime` to the nearest given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-02T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:01:00Z").pipe( * DateTime.nearest("day"), * DateTime.formatIso * ) * ``` */ export declare const nearest: { /** * Converts a `DateTime` to the nearest given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-02T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:01:00Z").pipe( * DateTime.nearest("day"), * DateTime.formatIso * ) * ``` */ (part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): (self: A) => A; /** * Converts a `DateTime` to the nearest given `part`. * * If the part is `week`, the `weekStartsOn` option can be used to specify the * day of the week that the week starts on. The default is 0 (Sunday). * * @since 3.6.0 * @category math * @example * ```ts * import { DateTime } from "effect" * * // returns "2024-01-02T00:00:00Z" * DateTime.makeUnsafe("2024-01-01T12:01:00Z").pipe( * DateTime.nearest("day"), * DateTime.formatIso * ) * ``` */ (self: A, part: DateTime.UnitSingular, options?: { readonly weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined; }): A; }; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * The `timeZone` option is set to the offset of the time zone. * * Note: On Node versions < 22, fixed "Offset" zones will set the time zone to * "UTC" and use the adjusted `Date`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * const formatted = DateTime.format(dt, { * dateStyle: "full", * timeStyle: "short", * locale: "en-US" * }) * * console.log(formatted) // "Saturday, June 15, 2024 at 3:30 PM" * ``` * * @since 3.6.0 * @category formatting */ export declare const format: { /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * The `timeZone` option is set to the offset of the time zone. * * Note: On Node versions < 22, fixed "Offset" zones will set the time zone to * "UTC" and use the adjusted `Date`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * const formatted = DateTime.format(dt, { * dateStyle: "full", * timeStyle: "short", * locale: "en-US" * }) * * console.log(formatted) // "Saturday, June 15, 2024 at 3:30 PM" * ``` * * @since 3.6.0 * @category formatting */ (options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): (self: DateTime) => string; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * The `timeZone` option is set to the offset of the time zone. * * Note: On Node versions < 22, fixed "Offset" zones will set the time zone to * "UTC" and use the adjusted `Date`. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * const formatted = DateTime.format(dt, { * dateStyle: "full", * timeStyle: "short", * locale: "en-US" * }) * * console.log(formatted) // "Saturday, June 15, 2024 at 3:30 PM" * ``` * * @since 3.6.0 * @category formatting */ (self: DateTime, options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): string; }; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * It will use the system's local time zone & locale. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Uses system local time zone and locale * const local = DateTime.formatLocal(dt, { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit" * }) * * console.log(local) // Output depends on system locale/timezone * ``` * * @since 3.6.0 * @category formatting */ export declare const formatLocal: { /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * It will use the system's local time zone & locale. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Uses system local time zone and locale * const local = DateTime.formatLocal(dt, { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit" * }) * * console.log(local) // Output depends on system locale/timezone * ``` * * @since 3.6.0 * @category formatting */ (options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): (self: DateTime) => string; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * It will use the system's local time zone & locale. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Uses system local time zone and locale * const local = DateTime.formatLocal(dt, { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit" * }) * * console.log(local) // Output depends on system locale/timezone * ``` * * @since 3.6.0 * @category formatting */ (self: DateTime, options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): string; }; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * This forces the time zone to be UTC. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * // Force UTC formatting regardless of time zone * const utcFormatted = DateTime.formatUtc(dt, { * year: "numeric", * month: "2-digit", * day: "2-digit", * hour: "2-digit", * minute: "2-digit", * timeZoneName: "short" * }) * * console.log(utcFormatted) // "06/15/2024, 02:30 PM UTC" * ``` * * @since 3.6.0 * @category formatting */ export declare const formatUtc: { /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * This forces the time zone to be UTC. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * // Force UTC formatting regardless of time zone * const utcFormatted = DateTime.formatUtc(dt, { * year: "numeric", * month: "2-digit", * day: "2-digit", * hour: "2-digit", * minute: "2-digit", * timeZoneName: "short" * }) * * console.log(utcFormatted) // "06/15/2024, 02:30 PM UTC" * ``` * * @since 3.6.0 * @category formatting */ (options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): (self: DateTime) => string; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * This forces the time zone to be UTC. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeZonedUnsafe("2024-06-15T14:30:00Z", { * timeZone: "Europe/London" * }) * * // Force UTC formatting regardless of time zone * const utcFormatted = DateTime.formatUtc(dt, { * year: "numeric", * month: "2-digit", * day: "2-digit", * hour: "2-digit", * minute: "2-digit", * timeZoneName: "short" * }) * * console.log(utcFormatted) // "06/15/2024, 02:30 PM UTC" * ``` * * @since 3.6.0 * @category formatting */ (self: DateTime, options?: Intl.DateTimeFormatOptions & { readonly locale?: string | undefined; } | undefined): string; }; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Create a custom formatter * const formatter = new Intl.DateTimeFormat("de-DE", { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit", * timeZone: "Europe/Berlin" * }) * * const formatted = DateTime.formatIntl(dt, formatter) * console.log(formatted) // "15. Juni 2024, 16:30" * ``` * * @since 3.6.0 * @category formatting */ export declare const formatIntl: { /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Create a custom formatter * const formatter = new Intl.DateTimeFormat("de-DE", { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit", * timeZone: "Europe/Berlin" * }) * * const formatted = DateTime.formatIntl(dt, formatter) * console.log(formatted) // "15. Juni 2024, 16:30" * ``` * * @since 3.6.0 * @category formatting */ (format: Intl.DateTimeFormat): (self: DateTime) => string; /** * Format a `DateTime` as a string using the `DateTimeFormat` API. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-06-15T14:30:00Z") * * // Create a custom formatter * const formatter = new Intl.DateTimeFormat("de-DE", { * year: "numeric", * month: "long", * day: "numeric", * hour: "2-digit", * minute: "2-digit", * timeZone: "Europe/Berlin" * }) * * const formatted = DateTime.formatIntl(dt, formatter) * console.log(formatted) // "15. Juni 2024, 16:30" * ``` * * @since 3.6.0 * @category formatting */ (self: DateTime, format: Intl.DateTimeFormat): string; }; /** * Format a `DateTime` as a UTC ISO string. * * Always returns the UTC representation in ISO 8601 format, ignoring any time zone. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T12:30:45.123Z") * console.log(DateTime.formatIso(dt)) // "2024-01-01T12:30:45.123Z" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:30:45.123Z", { * timeZone: "Europe/London" * }) * console.log(DateTime.formatIso(zoned)) // "2024-01-01T12:30:45.123Z" * ``` * * @category formatting * @since 3.6.0 */ export declare const formatIso: (self: DateTime) => string; /** * Format a `DateTime` as a time zone adjusted ISO date string. * * Returns only the date part (YYYY-MM-DD) after applying time zone adjustments. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T23:30:00Z") * console.log(DateTime.formatIsoDate(dt)) // "2024-01-01" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T23:30:00Z", { * timeZone: "Pacific/Auckland" // UTC+12/13 * }) * console.log(DateTime.formatIsoDate(zoned)) // "2024-01-02" (next day in Auckland) * ``` * * @category formatting * @since 3.6.0 */ export declare const formatIsoDate: (self: DateTime) => string; /** * Format a `DateTime` as a UTC ISO date string. * * Returns only the date part (YYYY-MM-DD) in UTC, ignoring any time zone. * * @example * ```ts * import { DateTime } from "effect" * * const dt = DateTime.makeUnsafe("2024-01-01T23:30:00Z") * console.log(DateTime.formatIsoDateUtc(dt)) // "2024-01-01" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T23:30:00Z", { * timeZone: "Pacific/Auckland" * }) * console.log(DateTime.formatIsoDateUtc(zoned)) // "2024-01-01" (always UTC) * ``` * * @category formatting * @since 3.6.0 */ export declare const formatIsoDateUtc: (self: DateTime) => string; /** * Format a `DateTime.Zoned` as an ISO string with an offset. * * For `DateTime.Utc`, returns the same as `formatIso`. For `DateTime.Zoned`, * includes the time zone offset in the format. * * @example * ```ts * import { DateTime } from "effect" * * const utc = DateTime.makeUnsafe("2024-01-01T12:00:00Z") * console.log(DateTime.formatIsoOffset(utc)) // "2024-01-01T12:00:00.000Z" * * const zoned = DateTime.makeZonedUnsafe("2024-01-01T12:00:00Z", { * timeZone: DateTime.zoneMakeOffset(3 * 60 * 60 * 1000) * }) * console.log(DateTime.formatIsoOffset(zoned)) // "2024-01-01T15:00:00.000+03:00" * ``` * * @category formatting * @since 3.6.0 */ export declare const formatIsoOffset: (self: DateTime) => string; /** * Format a `DateTime.Zoned` as a string. * * It uses the format: `YYYY-MM-DDTHH:mm:ss.sss+HH:MM[Time/Zone]`. * * @example * ```ts * import { DateTime } from "effect" * * const zoned = DateTime.makeZonedUnsafe("2024-06-15T14:30:45.123Z", { * timeZone: "Europe/London" * }) * * const formatted = DateTime.formatIsoZoned(zoned) * console.log(formatted) // "2024-06-15T15:30:45.123+01:00[Europe/London]" * * const offsetZone = DateTime.makeZonedUnsafe("2024-06-15T14:30:45.123Z", { * timeZone: DateTime.zoneMakeOffset(3 * 60 * 60 * 1000) * }) * * const offsetFormatted = DateTime.formatIsoZoned(offsetZone) * console.log(offsetFormatted) // "2024-06-15T17:30:45.123+03:00" * ``` * * @since 3.6.0 * @category formatting */ export declare const formatIsoZoned: (self: Zoned) => string; /** * Create a Layer from the given time zone. * * This layer provides the `CurrentTimeZone` service with the specified time zone. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const zone = DateTime.zoneMakeNamedUnsafe("Europe/London") * const layer = DateTime.layerCurrentZone(zone) * * const program = Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * return DateTime.formatIsoZoned(now) * }) * * // Use the layer to provide the time zone * Effect.provide(program, layer) * ``` * * @category current time zone * @since 3.6.0 */ export declare const layerCurrentZone: (resource: NoInfer) => Layer.Layer; /** * Create a Layer from the given time zone offset. * * This layer provides the `CurrentTimeZone` service with a fixed offset time zone. * * @example * ```ts * import { DateTime, Effect } from "effect" * * // Create a layer for UTC+3 * const layer = DateTime.layerCurrentZoneOffset(3 * 60 * 60 * 1000) * * const program = Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * return DateTime.formatIsoZoned(now) * }) * * Effect.provide(program, layer) * ``` * * @category current time zone * @since 3.6.0 */ export declare const layerCurrentZoneOffset: (offset: number) => Layer.Layer; /** * Create a Layer from the given IANA time zone identifier. * * This layer provides the `CurrentTimeZone` service with a named time zone. * If the time zone identifier is invalid, the layer will fail. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const layer = DateTime.layerCurrentZoneNamed("Europe/London") * * const program = Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * return DateTime.formatIsoZoned(now) * }) * * Effect.provide(program, layer) * ``` * * @category current time zone * @since 3.6.0 */ export declare const layerCurrentZoneNamed: (zoneId: string) => Layer.Layer; /** * Create a Layer from the system's local time zone. * * This layer provides the `CurrentTimeZone` service using the system's * configured local time zone. * * @example * ```ts * import { DateTime, Effect } from "effect" * * const program = Effect.gen(function*() { * const now = yield* DateTime.nowInCurrentZone * return DateTime.formatIsoZoned(now) * }) * * // Use the system's local time zone * Effect.provide(program, DateTime.layerCurrentZoneLocal) * ``` * * @category current time zone * @since 3.6.0 */ export declare const layerCurrentZoneLocal: Layer.Layer; export {}; //# sourceMappingURL=DateTime.d.ts.map