strftime

STRINGstrftimeSTRINGformatTIMEtime

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:

FormatSubstitution
%aThe abbreviated weekday name according to the current locale.
%AThe full weekday name according to the current locale.
%bThe abbreviated month name according to the current locale.
%BThe full month name according to the current locale.
%cThe preferred date and time representation for the current locale.
%CThe century number (year/100) as a 2-digit integer.
%dThe day of the month as a decimal number (range 01 to 31).
%DEquivalent to %m/%d/%y.
%eLike %d, the day of the month as a decimal number, but a leading zero is replaced by a space.
%FEquivalent to %Y-%m-%d (the ISO 8601 date format).
%GThe 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.
%gLike %G, but without century, that is; with a 2-digit year (00 to 99).
%hEquivalent to %b.
%HThe hour as a decimal number using a 24-hour clock (range 00 to 23).
%IThe hour as a decimal number using a 12-hour clock (range 01 to 12).
%jThe day of the year as a decimal number (range 001 to 366).
%mThe month as a decimal number (range 01 to 12).
%MThe minute as a decimal number (range 00 to 59).
%nA newline character.
%pEither 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.
%rThe time in a.m. or p.m. notation. In the POSIX locale this is equivalent to %I:%M:%S %p.
%RThe time in 24-hour notation (%H:%M). For a version including the seconds, see %T.
%sThe number of seconds since the epoch; that is, since 1970-01-01 00:00:00 UTC.
%SThe second as a decimal number (range 00 to 60). (A range up to 60 allows for occasional leap seconds.)
%tA tab character.
%TThe time in 24-hour notation (%H:%M:%S).
%uThe day of the week as a decimal, range 1 to 7, Monday being 1. See also %w.
%UThe 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.
%VThe 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.
%wThe day of the week as a decimal, range 0 to 6, Sunday being 0. See also %u.
%WThe 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.
%xThe preferred date representation for the current locale, without the time.
%XThe preferred time representation for the current locale, without the date.
%yThe year as a decimal number without a century (range 00 to 99).
%YThe year as a decimal number, including the century.
%zThe time-zone as an hour offset from GMT. Required to emit RFC 822-conformant dates (using %a, %d %b %Y %H:%M:%S %z).
%ZThe timezone or name or abbreviation.
%%A literal % character.

Format specifiers which produce numbers may include one of the following flags after the %:

FlagModification
0Use 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 format
set resp.http.now = strftime({"%Y-%m-%d %H:%M"}, now);
# resp.http.now is now e.g. 2006-01-02 22:04
# RFC 5322 format
set 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 format
set 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.