Formatters
The string::is::datetime and time::format functions in SurrealQL accept certain text formats for date/time formatting. The possible formats are listed below.
Date formatters
Specifier | Example | Description |
---|---|---|
%Y | 2001 | The full proleptic Gregorian year, zero-padded to 4 digits. |
%C | 20 | The proleptic Gregorian year divided by 100, zero-padded to 2 digits. |
%y | 01 | The proleptic Gregorian year modulo 100, zero-padded to 2 digits. |
%m | 07 | Month number (01 to 12), zero-padded to 2 digits. |
%b | Jul | Abbreviated month name. Always 3 letters. |
%B | July | Full month name. |
%h | Jul | Same as %b. |
%d | 08 | Day number (01 to 31), zero-padded to 2 digits. |
%e | 8 | Same as %d but space-padded. Same as %_d. |
%a | Sun | Abbreviated weekday name. Always 3 letters. |
%A | Sunday | Full weekday name. |
%w | 0 | Day of the week. Sunday = 0, Monday = 1, ..., Saturday = 6. |
%u | 7 | Day of the week. Monday = 1, Tuesday = 2, ..., Sunday = 7. (ISO 8601) |
%U | 28 | Week number starting with Sunday (00 to 53), zero-padded to 2 digits. |
%W | 27 | Same as %U, but week 1 starts with the first Monday in that year instead. |
%G | 2001 | Same as %Y but uses the year number in ISO 8601 week date. |
%g | 01 | Same as %y but uses the year number in ISO 8601 week date. |
%V | 27 | Same as %U but uses the week number in ISO 8601 week date (01 to 53). |
%j | 189 | Day of the year (001 to 366), zero-padded to 3 digits. |
%D | 07/08/01 | Month-day-year format. Same as %m/%d/%y. |
%x | 07/08/01 | Locale's date representation. |
%F | 2001-07-08 | Year-month-day format (ISO 8601). Same as %Y-%m-%d. |
%v | 8-Jul-2001 | Day-month-year format. Same as %e-%b-%Y. |
Time formatters
Specifier | Example | Description |
---|---|---|
%H | 00 | Hour number (00 to 23), zero-padded to 2 digits. |
%k | 0 | Same as %H but space-padded. Same as %_H. |
%I | 12 | Hour number in 12-hour clocks (01 to 12), zero-padded to 2 digits. |
%l | 12 | Same as %I but space-padded. Same as %_I. |
%P | am | am or pm in 12-hour clocks. |
%p | AM | AM or PM in 12-hour clocks. |
%M | 34 | Minute number (00 to 59), zero-padded to 2 digits. |
%S | 60 | Second number (00 to 60), zero-padded to 2 digits. |
%f | 026490000 | The fractional seconds (in nanoseconds) since last whole second. |
%.f | .026490 | Similar to %f but left-aligned. |
%.3f | .026 | Similar to .%f but left-aligned but fixed to a length of 3. |
%.6f | .026490 | Similar to .%f but left-aligned but fixed to a length of 6. |
%.9f | .026490000 | Similar to .%f but left-aligned but fixed to a length of 9. |
%3f | 026 | Similar to %.3f but without the leading dot. |
%6f | 026490 | Similar to %.6f but without the leading dot. |
%9f | 026490000 | Similar to %.9f but without the leading dot. |
%R | 00:34 | Hour-minute format. Same as %H:%M. |
%T | 00:34:59 | Hour-minute-second format. Same as %H:%M:%S. |
%X | 00:34:59 | Locale's time representation. |
%r | 12:34:59 AM | Hour-minute-second format in 12-hour clocks. Same as %I:%M:%S %p. |
%x | 07/08/01 | Locale's date representation. |
%F | 2001-07-08 | Year-month-day format (ISO 8601). Same as %Y-%m-%d. |
%v | 8-Jul-2001 | Day-month-year format. Same as %e-%b-%Y. |
Timezones formatters
Specifier | Example | Description |
---|---|---|
%Z | ACST | Local time zone name. |
%z | +0930 | Offset from the local time to UTC (with UTC being +0000). |
%:z | +09:30 | Same as %z but with a colon. |
Date & time formatters
Specifier | Example | Description |
---|---|---|
%c | Sun Jul 8 00:34:59 2001 | Locale's date and time. |
%+ | 2001-07-08T00:34:59.026490+09:30 | ISO 8601 / RFC 3339 date & time format. |
%s | 994518299 | UNIX timestamp, the number of seconds since 1970-01-01T00:00:00. |
Other formatters
Specifier | Example | Description |
---|---|---|
%t | - | Literal tab (\t). |
%n | - | Literal newline (\n). |
%% | - | Literal percent sign. |
Examples
Seeing if an input with a date and time conforms to an expected format:
RETURN string::is::datetime("5sep2024pm012345.6789", "%d%b%Y%p%I%M%S%.f");
Responsetrue
Another example with a different format:
RETURN string::is::datetime("23:56:00 2015-09-05", "%Y-%m-%d %H:%M");
Responsefalse
Using a formatter to generate a string from a datetime:
RETURN time::format("2021-11-01T08:30:17+00:00", "%Y-%m-%d");
Response"2021-11-01"