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).
%kThe hour (24-hour clock) as a decimal number (range 0 to 23); single digits are preceded by a blank. (See also %H.)
%lThe hour (12-hour clock) as a decimal number (range 1 to 12); single digits are preceded by a blank. (See also %I.)
%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.
%PLike %p but in lowercase: am or pm or a corresponding string for the current locale.
%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.

Valid modifiers include:

FormatSubstitution
%EcEquivalent to %c.
%ECEquivalent to %C.
%EnA newline character.
%EpEquivalent to %p.
%EPEquivalent to %P.
%ErEquivalent to %r.
%EREquivalent to %R.
%EsEquivalent to %s.
%EtA tab character.
%ETEquivalent to %T.
%EuEquivalent to %u.
%ExEquivalent to %x.
%EXEquivalent to %X.
%EyEquivalent to %y.
%EYEquivalent to %Y.
%EzEquivalent to %z.
%EZEquivalent to %Z.
%OCEquivalent to %C.
%OdEquivalent to %d.
%OeEquivalent to %e.
%OgEquivalent to %g.
%OGEquivalent to %G.
%OHEquivalent to %H.
%OIEquivalent to %I.
%OjEquivalent to %j.
%OkEquivalent to %k.
%OlEquivalent to %l.
%OmEquivalent to %m.
%OMEquivalent to %M.
%OnA newline character.
%OpEquivalent to %p.
%OPEquivalent to %P.
%OrEquivalent to %r.
%OREquivalent to %R.
%OsEquivalent to %s.
%OSEquivalent to %S.
%OtA tab character.
%OTEquivalent to %T.
%OuEquivalent to %u.
%OUEquivalent to %U.
%OVEquivalent to %V.
%OwEquivalent to %w.
%OWEquivalent to %W.
%OyEquivalent to %y.
%OzEquivalent to %z.
%OZEquivalent to %Z.

Valid extensions include:

FormatSubstitution
%-aEquivalent to %a.
%-AEquivalent to %A.
%-bEquivalent to %b.
%-BEquivalent to %B.
%-cEquivalent to %c.
%-CEquivalent to %C.
%-dEquivalent to %d.
%-DEquivalent to %D.
%-eEquivalent to %e.
%-FEquivalent to %F.
%-gEquivalent to %g.
%-GEquivalent to %G.
%-hEquivalent to %h.
%-HEquivalent to %H.
%-ILike %I, but without any padding.
%-jEquivalent to %j.
%-kEquivalent to %k.
%-lLike %l, but without any padding.
%-mlike %m, but without any padding.
%-MEquivalent to %M.
%-nA newline character.
%-pEquivalent to %p.
%-PEquivalent to %P.
%-rEquivalent to %r.
%-REquivalent to %R.
%-sEquivalent to %s.
%-SEquivalent to %S.
%-tA tab character.
%-TEquivalent to %T.
%-uEquivalent to %u.
%-UEquivalent to %U.
%-VEquivalent to %V.
%-wEquivalent to %w.
%-WEquivalent to %W.
%-xEquivalent to %x.
%-XEquivalent to %X.
%-yEquivalent to %y.
%-YEquivalent to %Y.
%-zLike %z, but without any padding.
%-ZEquivalent to %Z.
%_aEquivalent to %a.
%_AEquivalent to %A.
%_bEquivalent to %b.
%_BEquivalent to %B.
%_cEquivalent to %c.
%_CEquivalent to %C.
%_dEquivalent to %d.
%_DEquivalent to %D.
%_eEquivalent to %e.
%_FEquivalent to %F.
%_gEquivalent to %g.
%_GEquivalent to %G.
%_hEquivalent to %h.
%_HEquivalent to %H.
%_ILike %I, but spaces are used for padding.
%_jEquivalent to %j.
%_kEquivalent to %k.
%_lLike %l, but spaces are used for padding.
%_mLike %m, but spaces are used for padding.
%_MEquivalent to %M.
%_nA newline character.
%_pEquivalent to %p.
%_PEquivalent to %P.
%_rEquivalent to %r.
%_REquivalent to %R.
%_sEquivalent to %s.
%_SEquivalent to %S.
%_tA tab character.
%_TEquivalent to %T.
%_uEquivalent to %u.
%_UEquivalent to %U.
%_VEquivalent to %V.
%_wEquivalent to %w.
%_WEquivalent to %W.
%_xEquivalent to %x.
%_XEquivalent to %X.
%_yEquivalent to %y.
%_YEquivalent to %Y.
%_zLike %z, but spaces are used for padding.
%_ZEquivalent to %Z.
%0aEquivalent to %a.
%0AEquivalent to %A.
%0bEquivalent to %b.
%0BEquivalent to %B.
%0cEquivalent to %c.
%0CEquivalent to %C.
%0dEquivalent to %d.
%0DEquivalent to %D.
%0eEquivalent to %e.
%0FEquivalent to %F.
%0gEquivalent to %g.
%0GEquivalent to %G.
%0hEquivalent to %h.
%0HEquivalent to %H.
%0ILike %I, but zeros are used for padding.
%0jEquivalent to %j.
%0kEquivalent to %k.
%0lLike %l, but zeros are used for padding.
%0mLike %m, but zeros are used for padding.
%0MEquivalent to %M.
%0nA newline character.
%0pEquivalent to %p.
%0PEquivalent to %P.
%0rEquivalent to %r.
%0REquivalent to %R.
%0sEquivalent to %s.
%0SEquivalent to %S.
%0tA tab character.
%0TEquivalent to %T.
%0uEquivalent to %u.
%0UEquivalent to %U.
%0VEquivalent to %V.
%0wEquivalent to %w.
%0WEquivalent to %W.
%0xEquivalent to %x.
%0XEquivalent to %X.
%0yEquivalent to %y.
%0YEquivalent to %Y.
%0zLike %z, but zeros are used for padding.
%0ZEquivalent to %Z.

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.