{
  "classes": [
    {
      "constants": [],
      "types": [],
      "name": "@eryx/date",
      "tags": [],
      "functions": [
        {
          "source": {
            "path": "",
            "line": 216
          },
          "is_method": false,
          "signature": "date.now(\n    zone: string?  -- Optional IANA timezone name. Defaults to the system local zone.\n) → DateTime",
          "owner": "date",
          "desc": "Returns the current instant.",
          "tags": [],
          "name": "now",
          "return_str": "DateTime",
          "function_type": "Function",
          "errors": [
            {
              "desc": "Throws if `zone` is not a recognised IANA timezone name. "
            }
          ],
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string?",
              "name": "zone",
              "desc": "Optional IANA timezone name. Defaults to the system local zone."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 226
          },
          "is_method": false,
          "signature": "date.fromIso(s: string) → DateTime",
          "owner": "date",
          "desc": "Parses an ISO 8601 timestamp string (e.g. `\"2024-03-15T10:30:00+05:30\"`).\nThe UTC offset embedded in the string is stored as a fixed offset; call\n`WithZone()` on the result if you need DST-aware behaviour.",
          "tags": [],
          "name": "fromIso",
          "return_str": "DateTime",
          "function_type": "Function",
          "errors": [
            {
              "desc": "Throws if the string is not a valid ISO 8601 timestamp. "
            }
          ],
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "s",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 236
          },
          "is_method": false,
          "signature": "date.fromTimestamp(\n    ts: number,  -- Seconds since the Unix epoch (may be fractional).\n    zone: string?  -- Optional IANA timezone name. Defaults to the system local zone. \n) → DateTime",
          "owner": "date",
          "desc": "Creates a DateTime from a Unix timestamp (seconds since 1970-01-01T00:00:00Z).\nFractional seconds are supported (nanosecond precision).",
          "tags": [],
          "name": "fromTimestamp",
          "return_str": "DateTime",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "ts",
              "desc": "Seconds since the Unix epoch (may be fractional)."
            },
            {
              "lua_type": "string?",
              "name": "zone",
              "desc": "Optional IANA timezone name. Defaults to the system local zone. "
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 249
          },
          "is_method": false,
          "signature": "date.fromFields(\n    fields: { year: number, month: number, day: number, hour: number?, minute: number?, second: number?, nanosecond: number? },  -- Table with required keys `year`, `month`, `day` and optional keys `hour`, `minute`, `second`, `nanosecond`.\n    zone: string?  -- IANA timezone name. Defaults to the system local zone.\n) → DateTime",
          "owner": "date",
          "desc": "Creates a DateTime from individual calendar fields in the given timezone.\nMissing optional fields default to 0. The day is not clamped – passing an\ninvalid date (e.g. February 30) raises an error.",
          "tags": [],
          "name": "fromFields",
          "return_str": "DateTime",
          "function_type": "Function",
          "errors": [
            {
              "desc": "Throws if `zone` is invalid or the date fields are out of range. "
            }
          ],
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "{ year: number, month: number, day: number, hour: number?, minute: number?, second: number?, nanosecond: number? }",
              "name": "fields",
              "desc": "Table with required keys `year`, `month`, `day` and optional keys `hour`, `minute`, `second`, `nanosecond`."
            },
            {
              "lua_type": "string?",
              "name": "zone",
              "desc": "IANA timezone name. Defaults to the system local zone."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 273
          },
          "is_method": false,
          "signature": "date.parse(\n    s: string,  -- The input string to parse.\n    fmt: string,  -- A chrono format string, e.g. `\"%Y-%m-%d %H:%M:%S\"`.\n    zone: string?  -- Optional IANA timezone name. If omitted, the UTC offset parsed from the string is stored as a fixed offset; if no offset was parsed, the system local zone is assumed.\n) → DateTime",
          "owner": "date",
          "desc": "Parses a datetime string using a chrono format string (see module docs for tokens).",
          "tags": [],
          "name": "parse",
          "return_str": "DateTime",
          "function_type": "Function",
          "errors": [
            {
              "desc": "Throws if the string does not match the format. "
            }
          ],
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "s",
              "desc": "The input string to parse."
            },
            {
              "lua_type": "string",
              "name": "fmt",
              "desc": "A chrono format string, e.g. `\"%Y-%m-%d %H:%M:%S\"`."
            },
            {
              "lua_type": "string?",
              "name": "zone",
              "desc": "Optional IANA timezone name. If omitted, the UTC offset parsed from the string is stored as a fixed offset; if no offset was parsed, the system local zone is assumed."
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 278
          },
          "is_method": false,
          "signature": "date.timezone() → string",
          "owner": "date",
          "desc": "Returns the IANA name of the system's local timezone (e.g. `\"America/New_York\"`).",
          "tags": [],
          "name": "timezone",
          "return_str": "string",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 283
          },
          "is_method": false,
          "signature": "date.timezones() → { string }",
          "owner": "date",
          "desc": "Returns a list of all recognised IANA timezone names in the embedded TZ database.",
          "tags": [],
          "name": "timezones",
          "return_str": "{ string }",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "{ string }",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 288
          },
          "is_method": false,
          "signature": "date.isLeap(year: number) → boolean",
          "owner": "date",
          "desc": "Returns `true` when `year` is a leap year.",
          "tags": [],
          "name": "isLeap",
          "return_str": "boolean",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "boolean",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "year",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 294
          },
          "is_method": false,
          "signature": "date.daysInMonth(year: number, month: number) → number",
          "owner": "date",
          "desc": "Returns the number of days in `month` of `year` (accounts for leap years).\n`month` is 1-based (1 = January).",
          "tags": [],
          "name": "daysInMonth",
          "return_str": "number",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "number",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "year",
              "desc": ""
            },
            {
              "lua_type": "number",
              "name": "month",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 299
          },
          "is_method": false,
          "signature": "date.nanoseconds(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` nanoseconds.",
          "tags": [],
          "name": "nanoseconds",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 304
          },
          "is_method": false,
          "signature": "date.milliseconds(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` milliseconds.",
          "tags": [],
          "name": "milliseconds",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 309
          },
          "is_method": false,
          "signature": "date.seconds(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` seconds.",
          "tags": [],
          "name": "seconds",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 314
          },
          "is_method": false,
          "signature": "date.minutes(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` minutes.",
          "tags": [],
          "name": "minutes",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 319
          },
          "is_method": false,
          "signature": "date.hours(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` hours.",
          "tags": [],
          "name": "hours",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 325
          },
          "is_method": false,
          "signature": "date.days(n: number) → Duration",
          "owner": "date",
          "desc": "Returns a Duration of exactly `n` days (always 24 × 3600 seconds; not\ncalendar-aware – use `adddays` on DateTime for wall-clock days).",
          "tags": [],
          "name": "days",
          "return_str": "Duration",
          "function_type": "Function",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        }
      ],
      "properties": [],
      "source": {
        "path": "",
        "line": 0
      },
      "desc": "Lightweight datetime module backed by C++20 `std::chrono`.\n\nTwo core types are exposed:\n [[DateTime]]: a specific instant in time, paired with a display timezone.\n [[Duration]]: a signed span of time at nanosecond precision.\n\n## Timezone semantics\n\nA DateTime always stores the true UTC instant internally. The `zone` field only\ncontrols how that instant is *displayed* (local date/time fields, ISO string, etc.).\n\nInstants produced by `fromIso()` or `parse()` carry a **fixed UTC offset** from the\nstring (e.g. `+05:30`). Fixed-offset instants are unaware of DST. Call `WithZone()`\nto attach a named IANA zone so that DST-aware arithmetic and display work correctly.\n\n## Format strings\n`Format()`, `FormatUtc()`, and `parse()` accept C++20 `std::chrono` format tokens:\n\n| Token | Meaning                        |\n| ----- | ------------------------------ |\n| `%Y`  | Four-digit year                |\n| `%m`  | Month (01-12)                  |\n| `%d`  | Day (01-31)                    |\n| `%F`  | `%Y-%m-%d`                     |\n| `%H`  | Hour (00-23)                   |\n| `%M`  | Minute (00-59)                 |\n| `%S`  | Second (00-59) (+ sub-seconds) |\n| `%I`  | Hour (01-12)                   |\n| `%p`  | AM / PM                        |\n| `%T`  | `%H:%M:%S`                     |\n| `%R`  | `%H:%M`                        |\n| `%A`  | Full weekday name              |\n| `%B`  | Full month name                |\n| `%j`  | Day of year                    |\n| `%a`  | Abbreviated weekday            |\n| `%b`  | Abbreviated month              |\n| `%Z`  | Timezone name / offset         |\n| `%z`  | UTC offset +HHMM               |\n| `%Ez` | UTC offset +HH:MM              |\n\nLiteral `{` or `}` in a format string must be escaped as `{{` or `}}`.\n"
    },
    {
      "is_primary_export": false,
      "source": {
        "path": "",
        "line": 59
      },
      "tags": [],
      "properties": [
        {
          "tags": [],
          "lua_type": "days: number",
          "name": "days",
          "desc": "Days component"
        },
        {
          "tags": [],
          "lua_type": "hours: number",
          "name": "hours",
          "desc": "Hours component"
        },
        {
          "tags": [],
          "lua_type": "minutes: number",
          "name": "minutes",
          "desc": "Minutes component"
        },
        {
          "tags": [],
          "lua_type": "seconds: number",
          "name": "seconds",
          "desc": "Seconds component"
        },
        {
          "tags": [],
          "lua_type": "milliseconds: number",
          "name": "milliseconds",
          "desc": "Milliseconds component"
        },
        {
          "tags": [],
          "lua_type": "microseconds: number",
          "name": "microseconds",
          "desc": "Microseconds component"
        },
        {
          "tags": [],
          "lua_type": "nanoseconds: number",
          "name": "nanoseconds",
          "desc": "Nanoseconds component"
        },
        {
          "tags": [],
          "lua_type": "subSeconds: number",
          "name": "subSeconds",
          "desc": "Sub-second remainder as a floating-point fraction of a second."
        },
        {
          "tags": [],
          "lua_type": "totalDays: number",
          "name": "totalDays",
          "desc": "Total days"
        },
        {
          "tags": [],
          "lua_type": "totalHours: number",
          "name": "totalHours",
          "desc": "Total hours"
        },
        {
          "tags": [],
          "lua_type": "totalMinutes: number",
          "name": "totalMinutes",
          "desc": "Total minutes"
        },
        {
          "tags": [],
          "lua_type": "totalSeconds: number",
          "name": "totalSeconds",
          "desc": "Total seconds"
        },
        {
          "tags": [],
          "lua_type": "totalMilliseconds: number",
          "name": "totalMilliseconds",
          "desc": "Total milliseconds"
        },
        {
          "tags": [],
          "lua_type": "totalMicroseconds: number",
          "name": "totalMicroseconds",
          "desc": "Total microseconds"
        },
        {
          "tags": [],
          "lua_type": "totalNanoseconds: number",
          "name": "totalNanoseconds",
          "desc": "Total nanoseconds"
        }
      ],
      "desc": "A signed span of time stored at nanosecond precision.\n\n**Component fields** give the *remainder* at each unit after larger units are\nsubtracted (e.g. for a 90-second duration, `minutes` = 1 and `seconds` = 30).\n\n**Total fields** give the entire duration expressed as a floating-point count\nof the named unit (e.g. for 90 seconds, `totalMinutes` ≈ 1.5).\n\nSupported operators: `+`, `-`, `*` (scale by number), `/` (scale by number;\ndividing two Durations yields a `number` ratio), unary `-`, `==`, `<`, `<=`.\n",
      "name": "Duration",
      "functions": [
        {
          "source": {
            "path": "",
            "line": 94
          },
          "is_method": true,
          "signature": "Duration:abs() → Duration",
          "desc": "Returns a new Duration with the same magnitude but always non-negative.",
          "tags": [],
          "name": "abs",
          "return_str": "Duration",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": []
        }
      ],
      "metamethods": [
        {
          "signature": "Duration:__add(delta: Duration) → Duration",
          "name": "__add",
          "desc": ""
        },
        {
          "signature": "Duration:__sub(delta: Duration) → Duration",
          "name": "__sub",
          "desc": ""
        },
        {
          "signature": "Duration:__mul(other: number) → Duration",
          "name": "__mul",
          "desc": "Multiply by a scalar. Also works as `number * Duration`."
        },
        {
          "signature": "Duration:__div(other: number) → Duration",
          "name": "__div",
          "desc": "Divide by a scalar number. Dividing by another Duration yields a `number` ratio."
        },
        {
          "signature": "Duration:__unm() → Duration",
          "name": "__unm",
          "desc": ""
        },
        {
          "signature": "Duration:__eq(other: Duration) → boolean",
          "name": "__eq",
          "desc": ""
        },
        {
          "signature": "Duration:__lt(other: Duration) → boolean",
          "name": "__lt",
          "desc": ""
        },
        {
          "signature": "Duration:__le(other: Duration) → boolean",
          "name": "__le",
          "desc": ""
        },
        {
          "signature": "Duration:__tostring() → string",
          "name": "__tostring",
          "desc": ""
        }
      ],
      "types": []
    },
    {
      "is_primary_export": false,
      "source": {
        "path": "",
        "line": 121
      },
      "tags": [],
      "properties": [
        {
          "tags": [],
          "lua_type": "year: number",
          "name": "year",
          "desc": "Gregorian year (e.g. 2024)"
        },
        {
          "tags": [],
          "lua_type": "month: number",
          "name": "month",
          "desc": "Month of year, 1 = January, 12 = December"
        },
        {
          "tags": [],
          "lua_type": "day: number",
          "name": "day",
          "desc": "Day of month, 1–31"
        },
        {
          "tags": [],
          "lua_type": "hour: number",
          "name": "hour",
          "desc": "Hour of day, 0–23"
        },
        {
          "tags": [],
          "lua_type": "minute: number",
          "name": "minute",
          "desc": "Minute of hour, 0–59"
        },
        {
          "tags": [],
          "lua_type": "second: number",
          "name": "second",
          "desc": "Second of minute, 0–59"
        },
        {
          "tags": [],
          "lua_type": "nanosecond: number",
          "name": "nanosecond",
          "desc": "Nanosecond of second, 0–999999999"
        },
        {
          "tags": [],
          "lua_type": "zone: string",
          "name": "zone",
          "desc": "IANA timezone name (e.g. `\"America/New_York\"`) for named-zone instants,\nor a fixed UTC offset string (e.g. `\"+05:30\"`) for fixed-offset instants."
        },
        {
          "tags": [],
          "lua_type": "offset: number",
          "name": "offset",
          "desc": "UTC offset in **seconds** for the instant (accounts for DST when using a\nnamed zone)."
        },
        {
          "tags": [],
          "lua_type": "weekday: number",
          "name": "weekday",
          "desc": "ISO 8601 weekday: 1 = Monday, 7 = Sunday."
        },
        {
          "tags": [],
          "lua_type": "dayOfYear: number",
          "name": "dayOfYear",
          "desc": "Day of the year: 1 = January 1, 365/366 = December 31."
        },
        {
          "tags": [],
          "lua_type": "isLeap: boolean",
          "name": "isLeap",
          "desc": "`true` when the year of this instant is a leap year."
        },
        {
          "tags": [],
          "lua_type": "isDst: boolean",
          "name": "isDst",
          "desc": "`true` when this instant falls within a DST period.\nAlways `false` for fixed-offset instants (they have no DST concept)."
        }
      ],
      "desc": "A specific instant in time paired with a display timezone.\n\nAll calendar fields (`year`, `month`, ...) reflect **local time** in the\nassociated `zone`. The underlying UTC instant is unchanged by `WithZone()`.\n\nSupported operators: `+` / `-` with a Duration (shifts the instant),\n`==`, `<`, `<=` (compare UTC instants regardless of zone).\nSubtracting two DateTimes is not supported via `-`; use `Diff()` instead.\n",
      "name": "DateTime",
      "functions": [
        {
          "source": {
            "path": "",
            "line": 156
          },
          "is_method": true,
          "signature": "DateTime:toIsoString() → string",
          "desc": "Returns an ISO 8601 string such as `\"2024-03-15T10:30:00+05:30\"`.\nSub-seconds are included only when non-zero.",
          "tags": [],
          "name": "toIsoString",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 159
          },
          "is_method": true,
          "signature": "DateTime:toUnix() → number",
          "desc": "Returns the UTC Unix timestamp as a **whole number of seconds**.",
          "tags": [],
          "name": "toUnix",
          "return_str": "number",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "number",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 162
          },
          "is_method": true,
          "signature": "DateTime:toUnixMs() → number",
          "desc": "Returns the UTC Unix timestamp as a **whole number of milliseconds**.",
          "tags": [],
          "name": "toUnixMs",
          "return_str": "number",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "number",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 167
          },
          "is_method": true,
          "signature": "DateTime:withZone(zone: string) → DateTime",
          "desc": "Returns a new DateTime representing the same UTC instant displayed in\n`zone`. Converts a fixed-offset instant into a DST-aware named-zone one.\nThrows if `zone` is not a valid IANA timezone name.",
          "tags": [],
          "name": "withZone",
          "return_str": "DateTime",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "zone",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 170
          },
          "is_method": true,
          "signature": "DateTime:diff(other: DateTime) → Duration",
          "desc": "Returns a Duration equal to `self − other` (positive when `self` is later).",
          "tags": [],
          "name": "diff",
          "return_str": "Duration",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "Duration",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "DateTime",
              "name": "other",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 175
          },
          "is_method": true,
          "signature": "DateTime:format(fmt: string) → string",
          "desc": "Formats local time using a chrono format string (see module docs for tokens).\nFor fixed-offset instants, `%z`/`%Ez`/`%Z` expand to the literal offset.\nExample: `dt:Format(\"%Y-%m-%d %H:%M\")` -> `\"2024-03-15 10:30\"`",
          "tags": [],
          "name": "format",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "fmt",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 179
          },
          "is_method": true,
          "signature": "DateTime:formatUtc(fmt: string) → string",
          "desc": "Formats the underlying **UTC** time using a chrono format string.\n`%z` will always output `+0000`.",
          "tags": [],
          "name": "formatUtc",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "string",
              "name": "fmt",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 183
          },
          "is_method": true,
          "signature": "DateTime:startOfDay() → DateTime",
          "desc": "Returns a new DateTime at midnight (00:00:00.000000000) of the same\nlocal calendar day, preserving the zone/offset.",
          "tags": [],
          "name": "startOfDay",
          "return_str": "DateTime",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": []
        },
        {
          "source": {
            "path": "",
            "line": 188
          },
          "is_method": true,
          "signature": "DateTime:addMonths(n: number) → DateTime",
          "desc": "Returns a new DateTime shifted by `n` calendar months (may be negative).\nThe day is clamped to the last valid day of the target month\n(e.g. Jan 31 + 1 month -> Feb 28/29).",
          "tags": [],
          "name": "addMonths",
          "return_str": "DateTime",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 192
          },
          "is_method": true,
          "signature": "DateTime:addYears(n: number) → DateTime",
          "desc": "Returns a new DateTime shifted by `n` calendar years (may be negative).\nEquivalent to `AddMonths(n * 12)`.",
          "tags": [],
          "name": "addYears",
          "return_str": "DateTime",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "DateTime",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "number",
              "name": "n",
              "desc": ""
            }
          ]
        },
        {
          "source": {
            "path": "",
            "line": 196
          },
          "is_method": true,
          "signature": "DateTime:relative(other: DateTime?) → string",
          "desc": "Returns a human-readable relative time string such as `\"2 hours ago\"`\nor `\"in 3 days\"`. When `other` is omitted, the current instant is used.",
          "tags": [],
          "name": "relative",
          "return_str": "string",
          "function_type": "Method",
          "returns": [
            {
              "lua_type": "string",
              "desc": ""
            }
          ],
          "params": [
            {
              "lua_type": "DateTime?",
              "name": "other",
              "desc": ""
            }
          ]
        }
      ],
      "metamethods": [
        {
          "signature": "DateTime:__add(delta: Duration) → DateTime",
          "name": "__add",
          "desc": "Shift the instant forward by a Duration."
        },
        {
          "signature": "DateTime:__sub(delta: Duration) → DateTime",
          "name": "__sub",
          "desc": "Shift the instant backward by a Duration."
        },
        {
          "signature": "DateTime:__eq(other: DateTime) → boolean",
          "name": "__eq",
          "desc": "Compare UTC instants for equality (zone is ignored)."
        },
        {
          "signature": "DateTime:__lt(other: DateTime) → boolean",
          "name": "__lt",
          "desc": ""
        },
        {
          "signature": "DateTime:__le(other: DateTime) → boolean",
          "name": "__le",
          "desc": ""
        },
        {
          "signature": "DateTime:__tostring() → string",
          "name": "__tostring",
          "desc": ""
        }
      ],
      "types": []
    }
  ]
}