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.
Using S3-compatible buckets as private origins
Configure S3-compatible buckets to use as private origins for CDN delivery. Requests are authorized via signature version 4 to protect communication between your CDN service and the bucket. This is compatible with Fastly Object Storage, AWS S3, and most other S3-compatible storage offerings.
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.