Date and time code you can trust.
Join thousands of developers who stopped struggling with timezones. Tiempo makes Temporal conversions, formatting, and date math feel simple.
$ pnpm add @gobrand/tiempoRead the docsThe hard parts of time should feel simple.
Work in the timezone the business uses, move calendar days safely through DST, and return exact ISO back to your API.
Your team's timezone, anywhere
Convert an ISO timestamp into America/New_York, Asia/Tokyo, or UTC—regardless of where your code runs.
DST-safe calendar math
Adding a day means the next calendar day, not 24 hours. Your 9 AM schedule stays at 9 AM when clocks change.
A date is not a timestamp
Billing dates, birthdays, and holidays stay PlainDate values until you decide they represent a real moment.
Timezone mistakes get caught early
Autocomplete valid timezone names, including UTC, and keep invalid identifiers out of production.
Nanosecond precision
Keep exact API and database timestamps without routing them through Date's millisecond limit.
No hidden date mutations
Every operation returns a new value, so updating one schedule cannot quietly change another part of your app.
The usual time problems, solved.
Receive an ISO timestamp, work in the team's timezone, then send an exact ISO string back to your API.
Reschedule a team task without losing its timezone
The backend deals in ISO. The team deals in local calendar days. Tiempo makes that boundary explicit, safe through DST, and easy to send back.
import { addDays, endOfDay, format, toIso, toZonedTime } from '@gobrand/tiempo'; const teamTimezone = 'America/New_York'; // ISO from your backend → the team's calendar// task.dueAt = "2026-03-07T15:00:00Z"const dueAt = toZonedTime(task.dueAt, teamTimezone); // "Tomorrow, end of day" stays correct through DSTconst rescheduled = endOfDay(addDays(dueAt, 1)); format(rescheduled, "MMM d, h:mm a");// → "Mar 8, 11:59 PM" // Zoned value → exact UTC ISO back to the APIawait api.tasks.update({ dueAt: toIso(rescheduled) });Make time code obvious.
Use Temporal without making every call site solve Temporal from scratch. Install Tiempo and let the types carry the meaning.