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:05ZTry 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.