DGLux5 script stores a point in time in one of two ways:
dateNow() and dateParse() return this.new DateTime(…). It gives you the year, month, day, and so on.
To show a date to a user, use dateFormat() with a pattern or an ICU skeleton.
On this page:
See also the Date Time Operations blocks.
DateTime objects and date strings without an offset use the time zone of the browser that runs the page. Two people in different time zones can see different results from the same script. To get the same result everywhere, work with UTC: pass true as the third argument of dateFormat(), or use toUtc().
Use DateTime, not the JavaScript Date. Date does not exist in DGLux5 script.
In DateTime, months start at 1 (January = 1). In JavaScript Date, months start at 0.
| Constructor | Result |
|---|---|
new DateTime() | The current date and time, in local time. |
new DateTime(ms) | The date and time ms milliseconds after the epoch, in local time. |
new DateTime(dateString) | The parsed date string, in local time. Returns null if the string cannot be parsed. See Date strings. |
new DateTime(year, month, [day, hour, minute, second, millisecond]) | A local date and time built from parts. Missing parts are 0. |
When you build a date from parts, values outside the normal range roll over. For example, day 0 is the last day of the previous month, and month 13 is January of the next year. Pass numbers only.
new DateTime(2017, 3) is February 28, 2017, not March 1. Always pass the day.d = new DateTime(2017, 2, 27, 13, 27, 0); return [d.year, d.month, d.day, d.hour, d.minute, d.second];
Output: [2017, 2, 27, 13, 27, 0]
// Day 0 of March is the last day of February. return new DateTime(2024, 3, 0).day;
Output: 29
| Member | Returns |
|---|---|
year | The year, such as 2017. |
month | The month, 1–12. |
day | The day of the month, 1–31. |
hour | The hour, 0–23. |
minute | The minute, 0–59. |
second | The second, 0–59. |
millisecond | The millisecond, 0–999. |
weekday | The day of the week. Monday is 1 and Sunday is 7. |
millisecondsSinceEpoch | The time as milliseconds since the epoch. This does not depend on the time zone. |
isUtc | true if the object is in UTC, false if it is in local time. |
timeZoneOffset | The offset from UTC in milliseconds. For example, UTC-5 gives -18000000. |
toUtc() | A new DateTime for the same moment, in UTC. |
toLocal() | A new DateTime for the same moment, in local time. |
Members are read-only. To change a date, build a new one.
return new DateTime(2017, 8, 24).weekday;
Output: 4 (Thursday)
return new DateTime('2017-01-01T13:27:00.798').millisecond;
Output: 798
u = new DateTime(0).toUtc(); return [u.isUtc, u.year, u.month, u.day, u.hour];
Output: [true, 1970, 1, 1, 0]
DateTime objects. To find the time between two dates, subtract their millisecondsSinceEpoch values.DateTime object to the output of a Script block, it is shown as text such as 2017-02-27 13:27:00.000. Use dateFormat() to control the text.
dateNow()
Returns the current time in milliseconds since the epoch. This is the same as new DateTime().millisecondsSinceEpoch.
start = dateNow(); // ... do some work ... return dateNow() - start; // elapsed milliseconds
dateParse(str)
Parses a date string and returns milliseconds since the epoch. It accepts the same strings as new DateTime(str). If the string cannot be parsed, the script fails with an error.
return dateParse("2002-02-27T19:00:00Z");
Output: 1014836400000
// The same moment, written with a different offset. return dateParse("2002-02-27T14:00:00-0500") == dateParse("2002-02-27T19:00:00Z");
Output: true
dateFormat(date, format, [zone])
Returns date as a string, formatted with format.
zone (optional) — controls the time zone. See the table below. zone | Result |
|---|---|
| (omitted) | The date is shown in local time. |
true | If date is a number, it is shown in UTC. A DateTime or string is shown as with no zone. |
"+hh:mm" or "-hh:mm" | The date is shown in that fixed offset, for example "+05:30". xxx in the format is replaced by the offset. |
"auto" | For a string that ends in an offset such as 2020-01-01T10:00:00+05:00, the time is shown as written (10:00), and xxx in the format is replaced by the offset (+05:00). |
Returns an empty string if date is not a number, DateTime, or string.
return dateFormat(0, "yyyy-MM-dd HH:mm:ss", true);
Output: 1970-01-01 00:00:00
return dateFormat(1500000000000, "yyyy-MM-dd HH:mm xxx", "+05:00");
Output: 2017-07-14 07:40 +05:00
return dateFormat("2020-01-01T10:00:00+05:00", "HH:mm xxx", "auto");
Output: 10:00 +05:00
return dateFormat(new DateTime(2017, 8, 24, 15, 38, 0), "EEEE, MMMM d, y 'at' h:mm a");
Output: Thursday, August 24, 2017 at 3:38 PM
dateFormat, the block may wait for locale data to load before it runs.
dateTimeZoneOffset([zone])
Returns a time-zone offset in milliseconds.
5.5."hh:mm" or "-hh:mm": that offset. Other strings return NaN.return [dateTimeZoneOffset(8), dateTimeZoneOffset("-05:30"), dateTimeZoneOffset("+05:45")];
Output: [28800000, -19800000, 20700000]
new DateTime(str), dateParse(str), and dateFormat(str, …) accept these strings. Strings longer than 40 characters are not parsed.
ISO 8601 strings. If the string has Z or an offset, it is converted to local time. Otherwise it is read as local time.
Other formats, always read as local time:
yyyy-M-d, yyyy/M/d, or M/d/yyyy (US order), for example 2017/8/24 or 8/24/2017HH:mm:ss or HH:mm:ss.SSS (hours need two digits)am or pm, for example 8/24/2017 03:38:00 pm
A number string, such as "1500000000000", is read as milliseconds since the epoch.
A pattern is made of the letters below. Repeat a letter to change the output: for numbers, more letters add leading zeros (m → 6, mm → 06); for text, 3 letters give the short form and 4 give the full form. Any other character, such as :, -, /, or a space, is copied as is. Put other text in single quotes.
Examples are for Thursday, August 24, 2017, 15:38:05.978, in the en_US locale, in time zone UTC-8.
| Symbol | Meaning | Example |
|---|---|---|
| G | Era | AD |
| y, yyyy | Year | 2017 |
| yy | Year, 2 digits | 17 |
| M | Month number | 8 |
| MM | Month number, 2 digits | 08 |
| MMM | Month, short name | Aug |
| MMMM | Month, full name | August |
| L, LL, LLL, LLLL | Standalone month (same as M, but in some languages a different word form) | 8, 08, Aug, August |
| d | Day of month | 24 |
| dd | Day of month, 2 digits | 24 |
| c | Day of month (standalone) | 24 |
| ccc, cccc | Day of week, standalone short/full name | Thu, Thursday |
| E, EEE | Day of week, short name | Thu |
| EEEE | Day of week, full name | Thursday |
| D | Day of year | 236 |
| h | Hour, 12-hour clock (1–12) | 3 |
| hh | Hour, 12-hour clock, 2 digits | 03 |
| H | Hour, 24-hour clock (0–23) | 15 |
| HH | Hour, 24-hour clock, 2 digits | 15 |
| k | Hour, 24-hour clock (0–23), same as H | 15 |
| K | Hour, 12-hour clock (0–11) | 3 |
| a | AM/PM marker | PM |
| m, mm | Minute | 38 |
| s, ss | Second | 5, 05 |
| S, SSS | Milliseconds (always at least 3 digits) | 978 |
| z | Offset in hours | -8 |
| zz | Offset in hours, 2 digits | -08 |
| zzz | Offset with minutes | -08:00 |
| Z | Offset, RFC 822 | -800 |
| ZZ | Offset, RFC 822, 2-digit hour | -0800 |
| v | Time zone name from the browser | PST |
| Q | Quarter, short | Q3 |
| QQQQ | Quarter, full | 3rd quarter |
xxx | Replaced by the offset (+05:00) when dateFormat gets a zone argument | +05:00 |
| 'text' | Literal text | 'Date=' |
| '' | A single quote | 'o''clock' → o'clock |
d = new DateTime(2017, 8, 24, 15, 38, 5); return dateFormat(d, "yyyy-MM-dd HH:mm:ss") + " | " + dateFormat(d, "D") + " | " + dateFormat(d, "QQQQ");
Output: 2017-08-24 15:38:05 | 236 | 3rd quarter
A skeleton names a set of fields and lets the locale choose the order and punctuation. If the whole format string matches one of the skeletons below, it is used as a skeleton; otherwise it is read as a pattern.
To combine skeletons, separate them with |. Each part is formatted on its own and the results are joined. For example, yMd| |Hms gives 8/24/2017 15:38:00 (the middle part is a space).
Examples are for Thursday, August 24, 2017, 15:38:00, in the en_US locale.
| Skeleton | Meaning | Example |
|---|---|---|
| d | Day | 24 |
| E | Day of week, short | Thu |
| EEEE | Day of week | Thursday |
| LLL | Standalone month, short | Aug |
| LLLL | Standalone month | August |
| M | Month number | 8 |
| Md | Month and day | 8/24 |
| MEd | Day of week, month, day | Thu, 8/24 |
| MMM | Month, short | Aug |
| MMMd | Month and day | Aug 24 |
| MMMEd | Day of week, month, day | Thu, Aug 24 |
| MMMM | Month | August |
| MMMMd | Month and day | August 24 |
| MMMMEEEEd | Day of week, month, day | Thursday, August 24 |
| QQQ | Quarter | Q3 |
| QQQQ | Quarter | 3rd quarter |
| y | Year | 2017 |
| yM | Year and month | 8/2017 |
| yMd | Year, month, day | 8/24/2017 |
| yMEd | Year, month, day, day of week | Thu, 8/24/2017 |
| yMMM | Year and month | Aug 2017 |
| yMMMd | Year, month, day | Aug 24, 2017 |
| yMMMEd | Year, month, day, day of week | Thu, Aug 24, 2017 |
| yMMMM | Year and month | August 2017 |
| yMMMMd | Year, month, day | August 24, 2017 |
| yMMMMEEEEd | Year, month, day, day of week | Thursday, August 24, 2017 |
| yQQQ | Year and quarter | Q3 2017 |
| yQQQQ | Year and quarter | 3rd quarter 2017 |
| H | Hour (24-hour) | 15 |
| Hm | Hour and minute (24-hour) | 15:38 |
| Hms | Hour, minute, second (24-hour) | 15:38:00 |
| j | Hour (locale's clock) | 3 PM |
| jm | Hour and minute (locale's clock) | 3:38 PM |
| jms | Hour, minute, second (locale's clock) | 3:38:00 PM |
| m | Minute | 38 |
| ms | Minute and second | 38:00 |
| s | Second | 0 |
d = new DateTime(2017, 8, 24, 15, 38, 0); return dateFormat(d, "yMMMd") + " / " + dateFormat(d, "yMd| |Hms") + " / " + dateFormat(d, "jm");
Output: Aug 24, 2017 / 8/24/2017 15:38:00 / 3:38 PM
dt = new DateTime(); lastMonth = new DateTime(dt.year, dt.month, 0); return lastMonth.day;
weekday is 7 on Sunday, so this returns the previous Sunday when today is a Sunday.
dt = new DateTime(); lastSunday = new DateTime(dt.year, dt.month, dt.day - dt.weekday); return dateFormat(lastSunday, "yyyy-MM-dd");
ms = dateParse("2024-03-01T00:00:00Z") - dateParse("2024-02-01T00:00:00Z"); return ms / 86400000;
Output: 29
now = new DateTime(); start = new DateTime(now.year, now.month, now.day); return start.millisecondsSinceEpoch;
Format a number of milliseconds as UTC so that the time zone does not shift it.
duration = 3725000; // 1 h 2 min 5 s return dateFormat(duration, "HH:mm:ss", true);
Output: 01:02:05