Commit 0684cf86 authored by Kurtis Rader's avatar Kurtis Rader Committed by Toby Allen

Implement `{when_iso_local}` placeholder (#2363)

Implement `{when_iso_local}` placeholder

This implements the `{when_iso_local}` placeholder. This is like the
`{when_iso}` placeholder but the output is in the current timezone
rather than UTC.

Resolves #2362
parent 1570bc5d
...@@ -368,6 +368,8 @@ func (r *replacer) getSubstitution(key string) string { ...@@ -368,6 +368,8 @@ func (r *replacer) getSubstitution(key string) string {
return url.QueryEscape(r.request.URL.RequestURI()) return url.QueryEscape(r.request.URL.RequestURI())
case "{when}": case "{when}":
return now().Format(timeFormat) return now().Format(timeFormat)
case "{when_iso_local}":
return now().Format(timeFormatISO)
case "{when_iso}": case "{when_iso}":
return now().UTC().Format(timeFormatISOUTC) return now().UTC().Format(timeFormatISOUTC)
case "{when_unix}": case "{when_unix}":
...@@ -539,6 +541,7 @@ func (r *replacer) Set(key, value string) { ...@@ -539,6 +541,7 @@ func (r *replacer) Set(key, value string) {
const ( const (
timeFormat = "02/Jan/2006:15:04:05 -0700" timeFormat = "02/Jan/2006:15:04:05 -0700"
timeFormatISO = "2006-01-02T15:04:05" // ISO 8601 with timezone to be assumed as local
timeFormatISOUTC = "2006-01-02T15:04:05Z" // ISO 8601 with timezone to be assumed as UTC timeFormatISOUTC = "2006-01-02T15:04:05Z" // ISO 8601 with timezone to be assumed as UTC
headerContentType = "Content-Type" headerContentType = "Content-Type"
contentTypeJSON = "application/json" contentTypeJSON = "application/json"
......
...@@ -86,6 +86,7 @@ func TestReplace(t *testing.T) { ...@@ -86,6 +86,7 @@ func TestReplace(t *testing.T) {
old := now old := now
now = func() time.Time { now = func() time.Time {
// Note that the `-7` is seconds, not hours.
return time.Date(2006, 1, 2, 15, 4, 5, 99999999, time.FixedZone("hardcoded", -7)) return time.Date(2006, 1, 2, 15, 4, 5, 99999999, time.FixedZone("hardcoded", -7))
} }
defer func() { defer func() {
...@@ -101,6 +102,7 @@ func TestReplace(t *testing.T) { ...@@ -101,6 +102,7 @@ func TestReplace(t *testing.T) {
{"The response status is {status}.", "The response status is 200."}, {"The response status is {status}.", "The response status is 200."},
{"{when}", "02/Jan/2006:15:04:05 +0000"}, {"{when}", "02/Jan/2006:15:04:05 +0000"},
{"{when_iso}", "2006-01-02T15:04:12Z"}, {"{when_iso}", "2006-01-02T15:04:12Z"},
{"{when_iso_local}", "2006-01-02T15:04:05"},
{"{when_unix}", "1136214252"}, {"{when_unix}", "1136214252"},
{"{when_unix_ms}", "1136214252099"}, {"{when_unix_ms}", "1136214252099"},
{"The Custom header is {>Custom}.", "The Custom header is foobarbaz."}, {"The Custom header is {>Custom}.", "The Custom header is foobarbaz."},
...@@ -276,6 +278,7 @@ func BenchmarkReplace(b *testing.B) { ...@@ -276,6 +278,7 @@ func BenchmarkReplace(b *testing.B) {
recordRequest.Header().Set("Custom", "CustomResponseHeader") recordRequest.Header().Set("Custom", "CustomResponseHeader")
now = func() time.Time { now = func() time.Time {
// Note that the `-7` is seconds, not hours.
return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7)) return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7))
} }
...@@ -308,6 +311,7 @@ func BenchmarkReplaceEscaped(b *testing.B) { ...@@ -308,6 +311,7 @@ func BenchmarkReplaceEscaped(b *testing.B) {
recordRequest.Header().Set("Custom", "CustomResponseHeader") recordRequest.Header().Set("Custom", "CustomResponseHeader")
now = func() time.Time { now = func() time.Time {
// Note that the `-7` is seconds, not hours.
return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7)) return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7))
} }
...@@ -334,6 +338,7 @@ func TestResponseRecorderNil(t *testing.T) { ...@@ -334,6 +338,7 @@ func TestResponseRecorderNil(t *testing.T) {
old := now old := now
now = func() time.Time { now = func() time.Time {
// Note that the `-7` is seconds, not hours.
return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7)) return time.Date(2006, 1, 2, 15, 4, 5, 02, time.FixedZone("hardcoded", -7))
} }
defer func() { defer func() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment