
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
date-append-offset
Advanced tools
Ensure any ISO date string includes the correct timezone offset — safely, without shifting time.
Date Helpers is a lightweight TypeScript utility that appends the proper timezone offset (IANA) to any ISO date string while preserving the original date/time.
America/Sao_Paulo)2025-06-122025-06-12T12:002025-06-12T12:00:0012:00 → 12:00:00)12:00:00.123)Z-03:00npm install date-helpers
Also works with yarn add or pnpm add.
import { appendOffset } from 'date-helpers';
// Adds offset and completes missing time
appendOffset('2025-06-12', 'America/Sao_Paulo');
// → '2025-06-12T00:00:00-03:00'
// Adds offset and seconds
appendOffset('2025-06-12T12:00', 'America/Manaus');
// → '2025-06-12T12:00:00-04:00'
// Keeps milliseconds; Z becomes +00:00
appendOffset('2025-06-12T12:00:00.123Z', 'America/Sao_Paulo');
// → '2025-06-12T12:00:00.123+00:00'
// Already has an offset: returned as-is
appendOffset('2025-06-12T12:00:00-03:00', 'America/Manaus');
// → '2025-06-12T12:00:00-03:00'
// Invalid input (mixing Z with offset) throws
appendOffset('2025-06-12T12:00Z-03:00', 'America/Sao_Paulo');
// → ❌ Error: Invalid date: cannot mix Z (UTC) with offset
Beyond appendOffset, the lib exports helpers to extract/compose date and time parts:
import { getDate, getTime, joinDateAndTime } from 'date-helpers';
// Extracts the date part (YYYY-MM-DD)
getDate('2025-06-01T00:00:00-03:00');
// → '2025-06-01'
// Extracts the time part (HH:mm:ss)
getTime('2025-12-12T00:00:00-03:00');
// → '00:00:00'
// Merges date + time and appends offset based on timezone
joinDateAndTime('2025-06-01', '10:00:00', 'UTC');
// → '2025-06-01T10:00:00+00:00'
// Accepts timezone as a fixed offset
joinDateAndTime('2025-06-01', '10:00:00', '+02:00');
// → '2025-06-01T10:00:00+02:00'
// Keeps any offset already present on time
joinDateAndTime('2025-06-01', '10:00:00-03:00');
// → '2025-06-01T10:00:00-03:00'
appendOffset(input: string, timeZone: string): string
Z, converts to +00:00.getDate(date: string | Date, timeZone = 'UTC'): string
YYYY-MM-DD.timeZone.-00:00 (unknown local offset), no timezone conversion is performed.getTime(time: string | Date, timeZone = 'UTC'): string
HH:mm:ss.Date, respects UTC when provided; otherwise uses the object's local time.joinDateAndTime(date: string | Date, time: string | Date, timeZone = 'UTC'): string
YYYY-MM-DDTHH:mm:ss[.SSS] and appends an offset.timeZone can be IANA (America/Sao_Paulo) or a fixed offset (+02:00, -0300, -03).10:00-03:00), it is preserved.12:00 → 12:00:00).Z to +00:00.Z with an offset (e.g., 2025-06-12T12:00Z-03:00).2025/06/01, not-a-date).13, day 32).Intl.DateTimeFormat and IANA timezones
(Node.js 16+ or modern browsers).timeZoneName: 'shortOffset' to obtain offsets; modern environments return
values like GMT-3, correctly parsed.date-helpersdist/index.d.ts).MIT
FAQs
Append timezone offset to ISO date strings safely and consistently
We found that date-append-offset demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.