Files
2026-07-28 15:56:44 +01:00

220 lines
4.2 KiB
Markdown

# `date`
```
import "date" as date
```
Provides date and time handling using Unix timestamps internally. Dates are represented with millisecond precision and support creation, formatting, parsing, and accessing or modifying date components.
## `Date(timestamp_ms=null, timestamp_s=null, date=null, year=null, month=null, ...)`
Creates a new date object.
Dates can be created from timestamps:
```
let a = date.Date(timestamp_ms=0)
term.log(a.to_string()) # "1970-01-01 00:00:00"
let b = date.Date(timestamp_s=1)
term.log(b.to_string()) # "1970-01-01 00:00:01"
```
A date can also be copied from another `Date` object:
```
let a = date.Date(timestamp_s=100)
let b = date.Date(date=a)
term.log(b.unix()) # 100
```
Individual date components can be provided when constructing a date. Missing components use the default values:
```
let d = date.Date(year=2026, month=7, day=28)
term.log(d.to_string()) # "2026-07-28 00:00:00"
```
## `Date.now()`
Returns a `Date` representing the current time.
```
let now = date.Date.now()
term.log(now.to_string())
```
## `Date.now_utc()`
Returns the current UTC time.
Currently this is equivalent to `Date.now()` because dates are stored internally as UTC timestamps.
## `Date.from_string(str, fmt="%Y-%m-%d %H:%M:%S")`
Creates a `Date` by parsing a formatted date string.
```
let d = date.Date.from_string("2026-07-28 12:30:00")
term.log(d.year) # 2026
term.log(d.month) # 7
term.log(d.day) # 28
```
The format string uses `strftime`-style format specifiers:
```
let d = date.Date.from_string("28/07/2026", "%d/%m/%Y")
term.log(d.to_string()) # "2026-07-28 00:00:00"
```
## `date.unix()`
Returns the date as a Unix timestamp in seconds.
```
let d = date.Date(timestamp_s=1000)
term.log(d.unix()) # 1000
```
## `date.unix_ms()`
Returns the date as a Unix timestamp in milliseconds.
```
let d = date.Date(timestamp_ms=1000)
term.log(d.unix_ms()) # 1000
```
## Date properties
The following properties are available:
- `year`
- `month`
- `day`
- `hour`
- `minute`
- `second`
- `day_of_week`
- `day_of_year`
Example:
```
let d = date.Date(year=2026, month=7, day=28, hour=15)
term.log(d.year) # 2026
term.log(d.month) # 7
term.log(d.day) # 28
term.log(d.hour) # 15
```
`day_of_week` returns the weekday number, and `day_of_year` returns the day number within the year.
## `date.to_string(fmt="%Y-%m-%d %H:%M:%S")`
Formats the date as a UTC string.
```
let d = date.Date(year=2026, month=7, day=28)
term.log(d.to_string())
# "2026-07-28 00:00:00"
term.log(d.to_string("%d/%m/%Y"))
# "28/07/2026"
```
## `date.to_local_string(fmt="%Y-%m-%d %H:%M:%S")`
Formats the date using the local timezone.
```
let d = date.Date.now()
term.log(d.to_local_string())
```
## `date.http_date()`
Formats the date using the HTTP-date format.
```
let d = date.Date(timestamp_s=0)
term.log(d.http_date())
# "Thu, 01 Jan 1970 00:00:00 GMT"
```
## Date modification
The date components can be changed using setters:
- `set_year(value)`
- `set_month(value)`
- `set_day(value)`
- `set_hour(value)`
- `set_minute(value)`
- `set_second(value)`
Example:
```
let d = date.Date(year=2026, month=1, day=1)
d.set_month(7)
d.set_day(28)
term.log(d.to_string())
# "2026-07-28 00:00:00"
```
## `Date.monotonic()`
Returns the current monotonic clock value.
Unlike normal timestamps, monotonic time is not affected by system clock changes and is intended for measuring durations.
```
let start = date.Date.monotonic()
# do some work
let elapsed = date.Date.monotonic() - start
```
## Format strings
Formatting and parsing functions use `strftime`-style format codes.
Common format codes:
| Code | Meaning | Example |
| --- | --- | --- |
| `%Y` | Four digit year | `2026` |
| `%m` | Month number | `07` |
| `%d` | Day of month | `28` |
| `%H` | Hour (24-hour clock) | `15` |
| `%M` | Minute | `30` |
| `%S` | Second | `00` |
| `%a` | Short weekday name | `Tue` |
| `%b` | Short month name | `Jul` |
## Timezones
`Date` objects store timestamps as UTC internally.
Functions ending in `_utc` operate directly on UTC values, while local formatting functions apply the system timezone.
## Next
- [`json`](../json/README.md)
- [`file`](../file/README.md)