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.

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.