Bash:
השוואת שתי תאריכים
איך לעשות:
להלן דוגמאות לשימוש בתסריטי Bash להשוואת תאריכים:
# הגדרת שני תאריכים בפורמט YYYY-MM-DD
date1="2023-02-10"
date2="2023-02-15"
# המרת התאריכים לפרמט תאריך שניתן להשוואה
sec1=$(date -d "$date1" +%s)
sec2=$(date -d "$date2" +%s)
# בדיקת מי מהם קודם לכן והדפסת התוצאה
if [ $sec1 -lt $sec2 ]; then
echo "$date1 is earlier than $date2"
elif [ $sec1 -gt $sec2 ]; then
echo "$date2 is earlier than $date1"
else
echo "Both dates are the same"
fi
פלט לדוגמה:
2023-02-10 is earlier than 2023-02-15
עיון מעמיק:
השוואת תאריכים ב-Bash מתבצעת על ידי המרת התאריכים לשניות מאז התאריך המסוימת (epoch time) ולאחר מכן השוואת המספרים. תאריכים במערכות הפעלה מודרניות מתחילים להיספר מהתאריך 1 בינואר 1970 (הנקרא Unix epoch). קיימים תסריטים חלופיים, כמו למשל פקודת [[ $date1 < $date2 ]]
, אבל הם פחות נפוצים ולא תמיד מדויקים בגלל פורמטים שונים. אין טיפול ישיר ב-Bash באזורים זמניים או שמירת שעון קיץ, לכן צריך להקפיד להשוואה באזור זמן קבוע או לבצע המרות מתאימות.
ראה גם:
- Bash Date Command - המדריך הרשמי לפקודת
date
- Advanced Bash-Scripting Guide - מדריך מתקדם לכתיבת תסריטי Bash
- Unix Time - הסבר על Unix epoch time בוויקיפדיה