TypeScript Date Tutorials

As someone who has spent over eight years working with JavaScript and TypeScript in real-world projects across the United States, I know how challenging handling dates can be. In this tutorial, I’ll walk you through everything you need to know about working with dates in TypeScript, using practical examples relevant to American developers—think time zones, formatting for MM/DD/YYYY, and more.

TypeScript Date Types

TypeScript provides type definitions for JavaScript’s native Date object, making it easier and safer to work with dates in your applications.

Here’s how you can create a date variable in TypeScript:

// Current date and time
const currentDate: Date = new Date();

// Specific date (year, month (0-11), day)
const earthDay: Date = new Date(2025, 3, 22); // April 22, 2025

Remember that in JavaScript/TypeScript, months are zero-indexed, so January is 0 and December is 11.

Create Date Objects in TypeScript

There are several ways to initialize a Date object in TypeScript:

Method 1 – Current Date and Time

const now: Date = new Date();
console.log(now.toString()); // Output: current date and time

This method creates a Date object representing the exact moment the code executes. It’s ideal when you need to capture the current timestamp, such as for logging events or measuring elapsed time.

Method 2 – From Timestamp (milliseconds since Unix Epoch)

// Timestamp for April 21, 2025
const timestamp: number = 1745155200000;
const dateFromTimestamp: Date = new Date(timestamp);
console.log(dateFromTimestamp.toString()); // Output: Mon Apr 21 2025...

Creating a date from a timestamp is useful when working with databases or APIs that store dates as milliseconds since January 1, 1970 (Unix Epoch). This approach ensures precision and avoids timezone issues when transferring date data.

Method 3 – From Date String

const dateString: string = '2025-04-21T14:00:00';
const dateFromString: Date = new Date(dateString);
console.log(dateFromString.toString()); // Output: Mon Apr 21 2025 14:00:00...

The string format method is convenient when working with date strings from user input or API responses. TypeScript can parse ISO 8601 formatted strings (YYYY-MM-DDTHH:MM) reliably across different browsers.

Method 4 – Using Date Parameters

// new Date(year, monthIndex, day, hours, minutes, seconds, milliseconds)
const taxDay: Date = new Date(2025, 3, 15, 12, 0, 0);
console.log(taxDay.toString()); // Output: Tue Apr 15 2025 12:00:00...

This method provides the most control when you need to create a specific date and time. Each component is specified separately, making it easier to construct dates when you have individual values for year, month, day, etc.

Format Dates in TypeScript

One limitation of the native Date object is that it doesn’t provide built-in formatting options. Here are some approaches:

Method 1 – Using toLocaleDateString()

const date: Date = new Date(2025, 3, 21);
const options: Intl.DateTimeFormatOptions = { 
  weekday: 'long',
  year: 'numeric', 
  month: 'long', 
  day: 'numeric' 
};

// Formatting for US locale
const formattedDate: string = date.toLocaleDateString('en-US', options);
console.log(formattedDate); // Output: Monday, April 21, 2025

The toLocaleDateString() method is powerful because it automatically handles formatting based on the user’s locale. The options parameter allows you to customize exactly which date components to display and how they should appear, making it perfect for user-facing applications.

Check out: Calculate Yesterday’s Date in TypeScript

Method 2 – Custom Formatting Function

function formatDate(date: Date): string {
  const month = date.getMonth() + 1;
  const day = date.getDate();
  const year = date.getFullYear();
  
  return `${month}/${day}/${year}`;
}

const springDay = new Date(2025, 3, 21);
console.log(formatDate(springDay)); // Output: 4/21/2025

Custom formatting functions give you complete control over the output format. This approach is ideal when you need a specific date format that doesn’t match any of the standard locale formats, or when you need consistent formatting regardless of the user’s locale settings.

Check out Add Months to a Date in TypeScript

Date Operations in TypeScript

Here are some common date operations you might need:

Add Days to a Date

function addDays(date: Date, days: number): Date {
  const result = new Date(date);
  result.setDate(date.getDate() + days);
  return result;
}

const earthDay2025 = new Date(2025, 3, 22);
const weekAfterEarthDay = addDays(earthDay2025, 7);
console.log(weekAfterEarthDay.toDateString()); // Output: Tue Apr 29 2025

This function creates a new Date object to avoid modifying the original date, following the immutability principle. The setDate() method handles edge cases automatically, like month rollovers when adding days would exceed the current month’s length.

Calculate the Difference Between Dates

function daysBetween(date1: Date, date2: Date): number {
  // Convert to UTC to avoid DST issues
  const utc1 = Date.UTC(date1.getFullYear(), date1.getMonth(), date1.getDate());
  const utc2 = Date.UTC(date2.getFullYear(), date2.getMonth(), date2.getDate());
  
  // Calculate difference in days
  const MS_PER_DAY = 1000 * 60 * 60 * 24;
  return Math.floor((utc2 - utc1) / MS_PER_DAY);
}

const earthDay = new Date(2025, 3, 22); // April 22, 2025
const memorialDay = new Date(2025, 4, 26); // May 26, 2025
const daysBetweenHolidays = daysBetween(earthDay, memorialDay);
console.log(`There are ${daysBetweenHolidays} days between Earth Day and Memorial Day in 2025.`);

This function uses Date.UTC() to convert both dates to UTC time, eliminating potential daylight saving time (DST) issues. The result is then converted from milliseconds to days by dividing by the number of milliseconds in a day, giving an accurate count of days between dates.

Date Validation in TypeScript

Validating dates is a common requirement. Here’s a simple approach:

function isValidDate(dateString: string): boolean {
  const date = new Date(dateString);
  return !isNaN(date.getTime());
}

console.log(isValidDate('2025-04-21')); // true
console.log(isValidDate('2025-04-31')); // false (April only has 30 days)

This validation function leverages the fact that invalid dates in JavaScript result in NaN (Not a Number) when you call getTime(). It’s a simple but effective way to check if a string can be correctly parsed into a valid date, helping you catch input errors early.

Check out Create a Date from Year, Month, and Day in TypeScript

Working with Timezones

Dealing with timezones can be tricky. Here’s how to handle them:

// Get date in specific timezone
function getDateInTimezone(date: Date, timezone: string): string {
  return date.toLocaleString('en-US', { timeZone: timezone });
}

const aprilConference = new Date(2025, 3, 21, 9, 0, 0);
console.log(getDateInTimezone(aprilConference, 'America/New_York')); // Eastern Time
console.log(getDateInTimezone(aprilConference, 'America/Los_Angeles')); // Pacific Time
console.log(getDateInTimezone(aprilConference, 'America/Chicago')); // Central Time

This function uses the built-in toLocaleString() method with the timeZone option to display dates in different time zones. This is particularly useful for applications with users across multiple regions or when scheduling events that need to be displayed in the user’s local time.

Using External Libraries for Date Handling

For more complex date operations, consider using libraries like date-fns or dayjs:

Example with date-fns

import { format, addDays, differenceInDays } from 'date-fns';

const conferenceDate = new Date(2025, 3, 21);
const formattedDate = format(conferenceDate, 'MM/dd/yyyy');
console.log(formattedDate); // Output: 04/21/2025

const registrationDeadline = addDays(conferenceDate, -14);
const daysToRegister = differenceInDays(conferenceDate, registrationDeadline);
console.log(`Registration deadline is ${format(registrationDeadline, 'MM,dd, yyyy')}, which is ${daysToRegister} days before the conference.`);

The date-fns library provides a comprehensive set of functions for date manipulation that work seamlessly with TypeScript. Its modular approach means you only import the specific functions you need, keeping your bundle size small while gaining access to powerful, type-safe date operations.

Practical Example: Event Countdown Timer

Here’s a practical example of a countdown timer for an upcoming event:

function getTimeUntil(targetDate: Date): {
  days: number;
  hours: number;
  minutes: number;
  seconds: number;
} {
  const now = new Date();
  const difference = targetDate.getTime() - now.getTime();
  
  // Calculate time components
  const days = Math.floor(difference / (1000 * 60 * 60 * 24));
  const hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60));
  const seconds = Math.floor((difference % (1000 * 60)) / 1000);
  
  return { days, hours, minutes, seconds };
}

// Spring Conference 2025
const springConference = new Date(2025, 3, 21, 9, 0, 0); // April 21, 2025, 9 AM
const timeUntil = getTimeUntil(springConference);
console.log(`Time until Spring Conference 2025: ${timeUntil.days} days, ${timeUntil.hours} hours, ${timeUntil.minutes} minutes, ${timeUntil.seconds} seconds`);

This countdown function calculates the time remaining until a target date by breaking down the difference in milliseconds into days, hours, minutes, and seconds. It returns an object with these values, making it easy to update a UI display. This pattern is commonly used for event websites, product launches, or any time-sensitive feature.

TypeScript Date Best Practices

  1. Always validate date inputs from users or external sources.
  2. Be mindful of timezones when working with dates, especially for applications with global users.
  3. Consider immutability by creating new Date objects instead of modifying existing ones.
  4. Use typed date libraries that work well with TypeScript for complex date operations.
  5. Format dates according to the user’s locale for better user experience.

Working with dates in TypeScript is not that difficult. With the native Date object and TypeScript’s type system, you can handle most common date operations effectively. For more complex scenarios, there are excellent libraries available that provide additional functionality while maintaining type safety.

I hope you found this guide helpful for your TypeScript projects. If you have any questions or suggestions about working with dates in TypeScript, feel free to leave them in the comments below.

Here are TypeScript Date tutorials:

51 Python Programs

51 PYTHON PROGRAMS PDF FREE

Download a FREE PDF (112 Pages) Containing 51 Useful Python Programs.

Let’s be friends

Be the first to know about sales and special discounts.