strftime
Available inall subroutines.
Formats a time to a string. This uses standard POSIX strftime formats.
HINT: Regular strings ("short strings") in VCL use %xx
escapes (percent encoding) for special characters, which would conflict with the %
used in the strftime
format. For the strftime
examples, we use VCL "long strings" {"..."}
, which do not use the %xx
escapes. Alternatively, you could use %25
for each %
.
Valid format specifiers include:
Format | Substitution |
---|---|
%a | The abbreviated weekday name according to the current locale. |
%A | The full weekday name according to the current locale. |
%b | The abbreviated month name according to the current locale. |
%B | The full month name according to the current locale. |
%c | The preferred date and time representation for the current locale. |
%C | The century number (year/100) as a 2-digit integer. |
%d | The day of the month as a decimal number (range 01 to 31). |
%D | Equivalent to %m /%d /%y . |
%e | Like %d , the day of the month as a decimal number, but a leading zero is replaced by a space. |
%F | Equivalent to %Y -%m -%d (the ISO 8601 date format). |
%G | The ISO 8601 week-based year with century as a decimal number. The 4-digit year corresponding to the ISO week number (see %V ). This has the same format and value as %Y , except that if the ISO week number belongs to the previous or next year, that year is used instead. |
%g | Like %G , but without century, that is; with a 2-digit year (00 to 99). |
%h | Equivalent to %b . |
%H | The hour as a decimal number using a 24-hour clock (range 00 to 23). |
%I | The hour as a decimal number using a 12-hour clock (range 01 to 12). |
%j | The day of the year as a decimal number (range 001 to 366). |
%m | The month as a decimal number (range 01 to 12). |
%M | The minute as a decimal number (range 00 to 59). |
%n | A newline character. |
%p | Either AM or PM according to the given time value, or the corresponding strings for the current locale. Noon is treated as PM and midnight as AM . |
%r | The time in a.m. or p.m. notation. In the POSIX locale this is equivalent to %I :%M :%S %p . |
%R | The time in 24-hour notation (%H :%M ). For a version including the seconds, see %T . |
%s | The number of seconds since the epoch; that is, since 1970-01-01 00:00:00 UTC. |
%S | The second as a decimal number (range 00 to 60). (A range up to 60 allows for occasional leap seconds.) |
%t | A tab character. |
%T | The time in 24-hour notation (%H :%M :%S ). |
%u | The day of the week as a decimal, range 1 to 7, Monday being 1. See also %w . |
%U | The week number of the current year as a decimal number, range 00 to 53, starting with the first Sunday as the first day of week 01. See also %V and %W . |
%V | The ISO 8601 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least four days in the new year. See also %U and %W . |
%w | The day of the week as a decimal, range 0 to 6, Sunday being 0. See also %u . |
%W | The week number of the current year as a decimal number, range 00 to 53, starting with the first Monday as the first day of week 01. |
%x | The preferred date representation for the current locale, without the time. |
%X | The preferred time representation for the current locale, without the date. |
%y | The year as a decimal number without a century (range 00 to 99). |
%Y | The year as a decimal number, including the century. |
%z | The time-zone as an hour offset from GMT. Required to emit RFC 822-conformant dates (using %a , %d %b %Y %H :%M :%S %z ). |
%Z | The timezone or name or abbreviation. |
%% | A literal % character. |
Format specifiers which produce numbers may include one of the following flags after the %
:
Flag | Modification |
---|---|
0 | Use zeros for padding. |
_ | Use spaces for padding. |
- | Do not use any padding. |
For example, %-H
would produce 3
while %H
would produce 03
.
The POSIX standard E
and O
modifier characters have no effect. For example, %Ec
is equivalent to %c
.
This function is not prefixed with the std.
namespace.
Examples
# Concise formatset resp.http.now = strftime({"%Y-%m-%d %H:%M"}, now);# resp.http.now is now e.g. 2006-01-02 22:04
# RFC 5322 formatset resp.http.start = strftime({"%a, %d %b %Y %T %z"}, time.start);# resp.http.start is now e.g. Mon, 02 Jan 2006 22:04:05 +0000
# ISO 8601 formatset resp.http.end = strftime({"%Y-%m-%dT%H:%M:%SZ"}, time.end);# resp.http.end is now e.g. 2006-01-02T22:04:05Z
Try it out
strftime
is used in the following code examples. Examples apply VCL to real-world use cases and can be deployed as they are, or adapted for your own service. See the full list of code examples for more inspiration.
Click RUN on a sample below to provision a Fastly service, execute the code on Fastly, and see how the function behaves.
AWS S3 bucket origin (private)
Use AWS authenticated requests (signature version 4) to protect communication between your Fastly service and AWS.
Comprehensive logging
Fastly offers a myriad of different variables that you can log. See and test a large collection here.
Format time expressions
Format dates and times in a variety of ways.