Retrieving yesterday’s date is a frequent task in Linux scripting and automation. This guide presents two reliable methods using the built-in date
command and explores the considerations for handling time zones.
Table of Contents
Using the date
Command
The simplest approach involves directly using the date
command’s built-in “yesterday” functionality:
date -d "yesterday" +%Y-%m-%d
This command:
date
: Invokes the date command.-d "yesterday"
: Specifies that we want yesterday’s date.+%Y-%m-%d
: Formats the output as YYYY-MM-DD. You can customize this (e.g.,+%F
,+%Y/%m/%d
,+%d/%m/%Y
).
Example: If today is 2024-10-27, the output will be: 2024-10-26
Handling Time Zones for Greater Accuracy
For scripts requiring precise date calculations across different time zones, a more robust method is needed. While the previous method usually suffices, inconsistencies can arise due to daylight saving time transitions. This refined approach uses epoch time:
date -d "@$(($(date +%s) - 86400))" +%Y-%m-%d
This command:
date +%s
: Gets the current time in seconds since the epoch (January 1, 1970, 00:00:00 UTC).$(...)
: Command substitution, capturing the output of the inner command.- 86400
: Subtracts 86400 seconds (one day).@(...)
: Tellsdate
to interpret the preceding value as seconds since the epoch.date -d "..." +%Y-%m-%d
: Formats the resulting epoch time as YYYY-MM-DD.
This method ensures accuracy by directly manipulating the epoch time, avoiding potential timezone-related ambiguities.
For most scenarios, the first method using date -d "yesterday"
is sufficient. However, for critical applications or cross-timezone scripts, the second approach provides a more reliable solution. Remember to tailor the output format to your specific requirements.