Webhook Relay
PricingLogin
  • Introduction
  • Quick Start - Forwarding
  • Quick Start - Tunnels
  • 🛠️Installation
    • Relay CLI
      • Install
      • Auto-start
      • Run config.yaml reference
    • Containerized
      • Kubernetes Installation
      • Podman
      • Docker
      • Docker Compose
  • Products
    • 🛰️Webhook Forwarding
      • Glossary
      • WebSocket Server
      • Authentication
      • Custom Domains
    • ⚡Functions
      • Managing functions
      • Edit request/response
      • Working with JSON
      • 🦾Advanced
        • Working with time
        • Testing functions in CLI
        • Making HTTP Requests
        • Multipart Form Data
        • URLEncoded Form Data
        • GCP BigQuery
        • Sending Emails
        • JWT authentication
        • Base64, Hashes, Encryption
      • 🤖Integrating into CI/CD
    • 🔃Tunnels
      • Using tunnels
      • Custom Domains
      • Encryption (HTTPS)
      • Regions
  • 📝Examples
    • Intro to examples
    • Webhooks
      • Receiving webhooks on localhost
      • Receive webhooks inside your JavaScript app
      • Execute shell scripts on remote machines
    • Functions
      • Enrich webhooks from 3rd party APIs
      • Convert DockerHub webhook to Slack notification
      • Allowing only POST requests through
      • Manipulate webhook request body
    • Tunnels
      • Ingress for any Kubernetes environment
      • Demoing your website
    • 🏠Home Automation
      • Home Assistant
      • Node-RED
      • Raspberry Pi
  • Platform
    • CLI Basics
    • Using CLI Behind Proxy
    • Self-hosting Server
      • Server deployment
      • Client configuration
    • Security & Tech
Powered by GitBook
On this page
  • Formatting time
  • Parsing time
  • Timezones

Was this helpful?

  1. Products
  2. Functions
  3. Advanced

Working with time

Webhook Relay provides several helpers when working with time, this section shows how to get current time, how to parse and format time

To get current time in Unix format:

local time = require("time")

local now = time.unix()

r:SetRequestBody(tostring(now_unix))

-- Will set body to such as '1692450481.8626223'

Formatting time

Formatting time with Webhook Relay is a bit different from other languages’ approaches. Whereas other languages use a format like YYYY-MM-DD to format dates like: 2022-10-21, WHR uses a reference time.

This reference time is a point in time that the language will use to parse your layout : - 2 January 2006 03:04:05 PM in the time zone UTC -7

You might ask why this particular date. That’s because when you read it like that :

01/02 03:04:05PM '06 -0700

You can note that numbers follow each other: 1 (January), 2 (day), 3 (hour), 4(minutes)…

local time = require("time")

-- Get current time
local now = time.unix()

-- Declare the layout
local layout = "2006-01-02T15:04:05Z07:00"

-- Format it in our layout
local now_human_readable = time.format(now, layout)

r:SetRequestBody(now_human_readable)

-- prints out 2023-08-19T13:21:32Z

More example layouts:

Layout      = "01/02 03:04:05PM '06 -0700" // The reference time, in numerical order.
ANSIC       = "Mon Jan _2 15:04:05 2006"
UnixDate    = "Mon Jan _2 15:04:05 MST 2006"
RubyDate    = "Mon Jan 02 15:04:05 -0700 2006"
RFC822      = "02 Jan 06 15:04 MST"
RFC822Z     = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone
RFC850      = "Monday, 02-Jan-06 15:04:05 MST"
RFC1123     = "Mon, 02 Jan 2006 15:04:05 MST"
RFC1123Z    = "Mon, 02 Jan 2006 15:04:05 -0700" // RFC1123 with numeric zone
RFC3339     = "2006-01-02T15:04:05Z07:00"
RFC3339Nano = "2006-01-02T15:04:05.999999999Z07:00"
Kitchen     = "3:04PM"
// Handy time stamps.
Stamp      = "Jan _2 15:04:05"
StampMilli = "Jan _2 15:04:05.000"
StampMicro = "Jan _2 15:04:05.000000"
StampNano  = "Jan _2 15:04:05.000000000"

Parsing time

Parsing works the same way as formatting time, you will need to provide a time and the layout. Result will be returned as a Unix timestamp.

time.parse("Dec 2 03:33:05 2018", "Jan 2 15:04:05 2006")

Timezones

To format the time for some particular timezone, you can pass the third optional parameter into the `time.format()` function, for example:

local time = require("time")

local now = time.unix()

local layout = "01.02.2006 15:04"

local now_human_readable, err = time.format(now, layout, "CET")
if err then error(err) end

r:SetRequestBody(now_human_readable)
PreviousAdvancedNextTesting functions in CLI

Last updated 1 year ago

Was this helpful?

⚡
🦾