Skip to main content

PHP Timestamp Conversion

Introduction​

Timestamps are a fundamental concept in programming, representing a specific point in time as a numeric value. In PHP, a timestamp is an integer that represents the number of seconds that have elapsed since the Unix Epoch (January 1, 1970, 00:00:00 GMT). Working with timestamps is essential for many programming tasks, including:

  • Storing dates in databases
  • Calculating time differences
  • Scheduling events
  • Formatting dates for display
  • Creating date-based logic in applications

This guide will walk you through the basics of working with timestamps in PHP, demonstrating how to convert between various date formats and timestamps.

Understanding Timestamps​

Before diving into conversion methods, let's understand what a timestamp actually is:

For example:

  • The timestamp 0 represents January 1, 1970, 00:00:00 GMT
  • The timestamp 1609459200 represents January 1, 2021, 00:00:00 GMT
  • Negative timestamps represent times before the Unix Epoch

Getting the Current Timestamp​

The simplest way to get the current timestamp in PHP is using the time() function:

php
// Get current timestamp
$currentTimestamp = time();
echo "Current timestamp: " . $currentTimestamp;

// Example output: Current timestamp: 1677586432

This returns the number of seconds since the Unix Epoch to the current moment.

Converting Strings to Timestamps​

Using strtotime()​

The strtotime() function converts a human-readable date string into a timestamp:

php
// Basic date to timestamp conversion
$timestamp = strtotime("2023-03-15");
echo "Timestamp for March 15, 2023: " . $timestamp;
// Output: Timestamp for March 15, 2023: 1678838400

// Using relative dates
$timestamp = strtotime("next Monday");
echo "Timestamp for next Monday: " . $timestamp;

// Using date and time
$timestamp = strtotime("2023-03-15 14:30:00");
echo "Timestamp for March 15, 2023 2:30 PM: " . $timestamp;
// Output: Timestamp for March 15, 2023 2:30 PM: 1678890600

The strtotime() function is powerful and can understand a wide variety of date formats and relative expressions:

php
// Examples of relative expressions
echo strtotime("now") . "<br>"; // Current time
echo strtotime("+1 day") . "<br>"; // Tomorrow
echo strtotime("+1 week") . "<br>"; // Next week
echo strtotime("+1 week 2 days 4 hours") . "<br>"; // Complex relative time
echo strtotime("next Thursday") . "<br>"; // Next Thursday
echo strtotime("last Monday") . "<br>"; // Last Monday

Using DateTime class​

For more robust date handling, you can use the DateTime class:

php
// Create a DateTime object from a string
$dateTime = new DateTime("2023-03-15 14:30:00");

// Get the timestamp
$timestamp = $dateTime->getTimestamp();
echo "Timestamp using DateTime: " . $timestamp;
// Output: Timestamp using DateTime: 1678890600

Converting Timestamps to Formatted Dates​

Using date()​

The most common way to convert a timestamp back to a human-readable format is using the date() function:

php
$timestamp = 1678890600; // March 15, 2023 2:30 PM

// Format the timestamp into various date formats
echo date("Y-m-d", $timestamp) . "<br>"; // 2023-03-15
echo date("F j, Y", $timestamp) . "<br>"; // March 15, 2023
echo date("D, F j, Y, g:i a", $timestamp) . "<br>"; // Wed, March 15, 2023, 2:30 pm
echo date("Y-m-d H:i:s", $timestamp) . "<br>"; // 2023-03-15 14:30:00

Common format characters for the date() function:

FormatDescriptionExample
YFour-digit year2023
mMonth with leading zeros01-12
dDay with leading zeros01-31
H24-hour format with leading zeros00-23
iMinutes with leading zeros00-59
sSeconds with leading zeros00-59
FFull month nameJanuary-December
jDay without leading zeros1-31
g12-hour format without leading zeros1-12
aam/pmam or pm
DShort day nameMon-Sun

Using DateTime format​

You can also use the DateTime class to format dates:

php
$timestamp = 1678890600;
$dateTime = new DateTime();
$dateTime->setTimestamp($timestamp);

echo $dateTime->format('Y-m-d H:i:s') . "<br>"; // 2023-03-15 14:30:00
echo $dateTime->format('F j, Y, g:i a') . "<br>"; // March 15, 2023, 2:30 pm

Practical Examples​

Example 1: Calculating Age​

php
// Calculate age from birth date
function calculateAge($birthDate) {
$birthTimestamp = strtotime($birthDate);
$currentTimestamp = time();

// Calculate difference in years
$age = date('Y', $currentTimestamp) - date('Y', $birthTimestamp);

// Adjust age if birthday hasn't occurred yet this year
if (date('md', $currentTimestamp) < date('md', $birthTimestamp)) {
$age--;
}

return $age;
}

echo "Age: " . calculateAge("1990-05-15");
// Example output: Age: 33 (depending on current date)

Example 2: Time Remaining Until an Event​

php
// Calculate time remaining until an event
function timeRemaining($eventDate) {
$eventTimestamp = strtotime($eventDate);
$currentTimestamp = time();

// Calculate difference in seconds
$secondsDiff = $eventTimestamp - $currentTimestamp;

if ($secondsDiff <= 0) {
return "Event has already passed!";
}

// Convert to days, hours, minutes, seconds
$days = floor($secondsDiff / (60 * 60 * 24));
$secondsDiff -= $days * (60 * 60 * 24);

$hours = floor($secondsDiff / (60 * 60));
$secondsDiff -= $hours * (60 * 60);

$minutes = floor($secondsDiff / 60);
$seconds = $secondsDiff - ($minutes * 60);

return "$days days, $hours hours, $minutes minutes, $seconds seconds";
}

echo "Time until New Year: " . timeRemaining("2024-01-01 00:00:00");
// Example output: Time until New Year: 125 days, 4 hours, 25 minutes, 16 seconds

Example 3: Working with Different Timezones​

php
// Working with different timezones
function convertTimezone($dateString, $fromTimezone, $toTimezone) {
// Create DateTime object with the original timezone
$date = new DateTime($dateString, new DateTimeZone($fromTimezone));

// Change the timezone
$date->setTimezone(new DateTimeZone($toTimezone));

// Return formatted date
return $date->format('Y-m-d H:i:s');
}

echo "New York time: " . convertTimezone(
"2023-03-15 14:30:00",
"America/New_York",
"Europe/London"
);
// Example output: New York time: 2023-03-15 18:30:00 (London time)

Handling Timestamp Limitations​

PHP's standard timestamp has limitations. On 32-bit systems, it can only represent dates between December 13, 1901, and January 19, 2038 (known as the Year 2038 problem). For dates outside this range, use the DateTime class:

php
// Working with dates beyond timestamp limitations
$date = new DateTime('2040-01-01'); // Beyond 2038
echo $date->format('Y-m-d'); // Will correctly output 2040-01-01

Common Mistakes and Troubleshooting​

1. Incorrect timestamp formats​

php
// This will NOT work as expected
$invalidTimestamp = strtotime("15-03-2023"); // Ambiguous format (day-month-year or month-day-year?)

// Better approach - use unambiguous formats:
$validTimestamp = strtotime("2023-03-15"); // Year-month-day format
// or
$validTimestamp = strtotime("15 March 2023"); // Day month year format

2. Forgetting about timezones​

php
// Set default timezone to avoid unexpected results
date_default_timezone_set('UTC');

// Or specify timezone when creating DateTime objects
$date = new DateTime("2023-03-15", new DateTimeZone('America/New_York'));

3. Comparing dates without normalization​

php
// Incorrect comparison - includes time components
$date1 = strtotime("2023-03-15 14:30:00");
$date2 = strtotime("2023-03-15 09:15:00");
$sameDay = ($date1 == $date2); // False, but both are the same day

// Correct comparison - normalize to start of day
$date1 = strtotime(date("Y-m-d", strtotime("2023-03-15 14:30:00")));
$date2 = strtotime(date("Y-m-d", strtotime("2023-03-15 09:15:00")));
$sameDay = ($date1 == $date2); // True

Summary​

In this guide, we've covered the essentials of PHP timestamp conversion:

  • Understanding what timestamps are and how they work in PHP
  • Converting between date strings and timestamps using strtotime() and DateTime
  • Formatting timestamps into readable dates with the date() function
  • Working with practical examples like age calculation and event countdown
  • Handling timezone differences
  • Overcoming timestamp limitations
  • Avoiding common mistakes

Timestamps provide a powerful way to handle dates in PHP applications. By understanding how to convert between timestamps and formatted dates, you can effectively manage time-based operations in your projects.

Exercises​

  1. Create a function that returns the day of the week (Monday, Tuesday, etc.) for any given date.
  2. Write a script that calculates the number of business days (excluding weekends) between two dates.
  3. Build a birthday reminder that shows upcoming birthdays in the next 30 days from a list of birth dates.
  4. Create a function that converts a timestamp to a "time ago" format (e.g., "2 hours ago", "3 days ago").
  5. Implement a date validation function that checks if a given date string is valid and within a specific range.

Additional Resources​



If you spot any mistakes on this website, please let me know at feedback@compilenrun.com. I’d greatly appreciate your feedback! :)