Date

The Date: module provides Unix-timestamp-based date arithmetic and formatting. All timestamps are Number (seconds since the Unix epoch, as returned by Date:Now).

Supported strftime format specifiers: %Y year · %m month · %d day · %H hour · %M minute · %S second.


Call Effect
Date:Now(outVar) Current Unix timestamp → outVar
Date:Format(ts, fmt, outVar) Format timestamp using strftime-style format → outVar
Date:Parse(str, fmt, outVar) Parse date string to timestamp → outVar (-1 on failure)
Date:Year(ts, outVar) Full year (e.g. 2025) → outVar
Date:Month(ts, outVar) Month 1–12 → outVar
Date:Day(ts, outVar) Day of month 1–31 → outVar
Date:Hour(ts, outVar) Hour 0–23 → outVar
Date:Minute(ts, outVar) Minute 0–59 → outVar
Date:Second(ts, outVar) Second 0–59 → outVar
Date:Add(ts, days, outVar) / Date:AddDays Timestamp + days × 86400outVar
Date:Diff(ts1, ts2, outVar) / Date:DaysBetween (ts2 − ts1) in whole days → outVar
Var:Number ts;
Date:Now(ts);

Var:String formatted;
Date:Format(ts, "%Y-%m-%d", formatted);
Konsol:Print(formatted);        // e.g. 2025-08-01

Var:Number year; Var:Number month; Var:Number day;
Date:Year(ts, year);
Date:Month(ts, month);
Date:Day(ts, day);
Konsol:Print("${year}-${month}-${day}");

// Add 7 days
Var:Number nextWeek;
Date:Add(ts, 7, nextWeek);
Date:Format(nextWeek, "%Y-%m-%d", formatted);
Konsol:Print(formatted);

// Days between two timestamps
Var:Number past;
Date:Parse("2025-01-01", "%Y-%m-%d", past);
Var:Number diff;
Date:Diff(past, ts, diff);
Konsol:Print("${diff} days since Jan 1");

For current wall-clock time (hour/minute/second) without arithmetic, see Time.


Examples

// 37_date.ks — Date module

Var:Number ts;
Var:Number n;
Var:String s;

Konsol:Print("=== Now ===");
Date:Now(ts);
Konsol:Print(ts > 0);           // true  (non-zero Unix timestamp)

Konsol:Print("=== Format ===");
// Use a known fixed timestamp: 2025-01-15 12:30:45 UTC
// 1736944245 — but localtime varies by timezone, so we test round-trip instead
Date:Now(ts);
Date:Format(ts, "%Y-%m-%d", s);
Konsol:Print(s);                // e.g. 2026-05-08  (current date)

Date:Format(ts, "%H:%M:%S", s);
Konsol:Print(s);                // e.g. 14:23:01  (current time)

Konsol:Print("=== Parse ===");
Date:Parse("2025-06-15", "%Y-%m-%d", n);
Konsol:Print(n > 0);            // true

Date:Format(n, "%Y-%m-%d", s);
Konsol:Print(s);                // 2025-06-15

Date:Parse("2025-12-31 23:59:59", "%Y-%m-%d %H:%M:%S", n);
Date:Format(n, "%Y-%m-%d", s);
Konsol:Print(s);                // 2025-12-31

Konsol:Print("=== Components ===");
Date:Parse("2025-06-15 08:30:45", "%Y-%m-%d %H:%M:%S", ts);
Date:Year(ts, n);   Konsol:Print(n);   // 2025
Date:Month(ts, n);  Konsol:Print(n);   // 6
Date:Day(ts, n);    Konsol:Print(n);   // 15
Date:Hour(ts, n);   Konsol:Print(n);   // 8
Date:Minute(ts, n); Konsol:Print(n);   // 30
Date:Second(ts, n); Konsol:Print(n);   // 45

Konsol:Print("=== Add ===");
Date:Parse("2025-01-01", "%Y-%m-%d", ts);
Date:Add(ts, 30, n);
Date:Format(n, "%Y-%m-%d", s);
Konsol:Print(s);                // 2025-01-31

Date:Add(ts, 365, n);
Date:Format(n, "%Y-%m-%d", s);
Konsol:Print(s);                // 2026-01-01

Konsol:Print("=== Diff ===");
Date:Parse("2025-01-01", "%Y-%m-%d", ts);
Var:Number ts2;
Date:Parse("2025-03-01", "%Y-%m-%d", ts2);
Date:Diff(ts, ts2, n);
Konsol:Print(n);                // 59

Konsol:Print("done");