Dates Times Snippets
Custom Code Snippets — Dates & Times
Copy-paste examples for working with dates and times inside a Custom Code workflow step. Use the DateTime helper for almost everything — it handles formatting, parsing, deltas, and weekend checks without needing a third-party library.
The DateTime helper covers now, today, format, parse, addDays, addHours, addMinutes, diffDays, and isWeekend. Common format tokens: YYYY, MM, DD, HH, mm, ss, plus MMMM D, YYYY for friendly display.
Format today as "April 26, 2026"
returnData("today", DateTime.format(DateTime.now(), "MMMM D, YYYY"));
Format the current timestamp as ISO-style
returnData("iso_now", DateTime.format(DateTime.now(), "YYYY-MM-DD HH:mm:ss"));
Days until a due date
// Inputs: due_date (record_val on a Date field)
const due = params["due_date"];
if (!due) {
returnData("days_until", null);
return;
}
const days = DateTime.diffDays(DateTime.now(), due);
returnData("days_until", days);
returnData("is_overdue", days < 0);
returnData("status", days < 0 ? "overdue" : days <= 3 ? "soon" : "on_track");
Add 30 days to a date
const start = params["start_date"] || DateTime.now();
const expires = DateTime.addDays(start, 30);
returnData("expires_at", DateTime.format(expires, "YYYY-MM-DD"));
First and last day of the current month
const now = new Date();
const start = new Date(now.getFullYear(), now.getMonth(), 1);
const end = new Date(now.getFullYear(), now.getMonth() + 1, 0);
returnData("month_start", DateTime.format(start, "YYYY-MM-DD"));
returnData("month_end", DateTime.format(end, "YYYY-MM-DD"));
Skip weekends — find the next business day
let d = DateTime.addDays(DateTime.now(), 1);
while (DateTime.isWeekend(d)) {
d = DateTime.addDays(d, 1);
}
returnData("next_business_day", DateTime.format(d, "YYYY-MM-DD"));
Add N business days, skipping weekends
// Inputs: start (record_val), business_days (custom_val)
let d = params["start"] || DateTime.now();
let remaining = Number(params["business_days"]) || 0;
while (remaining > 0) {
d = DateTime.addDays(d, 1);
if (!DateTime.isWeekend(d)) remaining--;
}
returnData("delivery_date", DateTime.format(d, "YYYY-MM-DD"));
Bucket a record into "this week / this month / older"
const created = record.created_at;
if (!created) {
returnData("bucket", "unknown");
return;
}
const days = DateTime.diffDays(created, DateTime.now());
let bucket;
if (days <= 7) bucket = "this_week";
else if (days <= 30) bucket = "this_month";
else if (days <= 365) bucket = "this_year";
else bucket = "older";
returnData("bucket", bucket);
Which quarter is a date in?
// "2026-04-26" -> "Q2 2026"
const d = new Date(params["date"] || DateTime.now());
const month = d.getMonth(); // 0-11
const quarter = Math.floor(month / 3) + 1;
returnData("quarter", `Q${quarter} ${d.getFullYear()}`);
Age in whole years from a date of birth
// Inputs: dob (record_val)
const dob = params["dob"];
if (!dob) {
returnData("age", null);
return;
}
const birth = new Date(dob);
const today = new Date();
let age = today.getFullYear() - birth.getFullYear();
const monthDiff = today.getMonth() - birth.getMonth();
if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birth.getDate())) {
age--;
}
returnData("age", age);
returnData("is_adult", age >= 18);
"Good morning / afternoon / evening" greeting
const hour = new Date().getHours();
let greeting;
if (hour < 12) greeting = "Good morning";
else if (hour < 18) greeting = "Good afternoon";
else greeting = "Good evening";
returnData("greeting", `${greeting}, ${loggedInUser.first_name || "friend"}!`);
Friendly relative time ("3 days ago")
const created = record.created_at;
if (!created) { returnData("ago", "unknown"); return; }
const seconds = Math.floor((Date.now() - new Date(created).getTime()) / 1000);
let ago;
if (seconds < 60) ago = "just now";
else if (seconds < 3600) ago = `${Math.floor(seconds / 60)} min ago`;
else if (seconds < 86400) ago = `${Math.floor(seconds / 3600)} hr ago`;
else if (seconds < 604800) ago = `${Math.floor(seconds / 86400)} day(s) ago`;
else if (seconds < 2592000) ago = `${Math.floor(seconds / 604800)} week(s) ago`;
else ago = DateTime.format(created, "MMMM D, YYYY");
returnData("ago", ago);
Overdue tier — green/yellow/red
const due = params["due_date"];
const days = due ? DateTime.diffDays(DateTime.now(), due) : null;
let tier;
if (days == null) tier = "unknown";
else if (days < -7) tier = "red"; // more than a week overdue
else if (days < 0) tier = "yellow"; // overdue, not severe
else if (days <= 3) tier = "yellow"; // due soon
else tier = "green";
returnData("overdue_tier", tier);
Meeting end time = start + N minutes
// Inputs: start_time (record_val), duration_minutes (custom_val 60)
const start = params["start_time"] || DateTime.now();
const length = Number(params["duration_minutes"]) || 60;
const end = DateTime.addMinutes(start, length);
returnData("end_time", DateTime.format(end, "YYYY-MM-DD HH:mm:ss"));
returnData("end_label", DateTime.format(end, "h:mm A"));
Day-of-week label
const days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
const d = new Date(params["date"] || DateTime.now());
returnData("day_name", days[d.getDay()]);
returnData("is_weekend", d.getDay() === 0 || d.getDay() === 6);
ISO week number (1–53)
// "Which week is it?" — handy for weekly digests
const d = new Date(params["date"] || DateTime.now());
const target = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
const dayNum = (target.getUTCDay() + 6) % 7;
target.setUTCDate(target.getUTCDate() - dayNum + 3);
const firstThursday = new Date(Date.UTC(target.getUTCFullYear(), 0, 4));
const week = 1 + Math.round(((target - firstThursday) / 86400000 - 3 + ((firstThursday.getUTCDay() + 6) % 7)) / 7);
returnData("iso_week", week);
returnData("iso_year", target.getUTCFullYear());
Are we currently inside business hours?
// Mon-Fri, 9:00-17:00 (host clock)
const now = new Date();
const day = now.getDay();
const hour = now.getHours();
const isBusiness = day >= 1 && day <= 5 && hour >= 9 && hour < 17;
returnData("is_business_hours", isBusiness);
returnData("auto_reply", isBusiness
? "We received your message — a teammate will reply shortly."
: "Thanks! We'll respond on the next business day.");
We'd love to hear your feedback.