logo


פרק 9: המילניום - ניהול זמן ותאריך

הזמן בפרוסות

החסרון בהיבט הסקלרי של שימוש ב localtime (או ב gmtime) הוא הפלט המעוצב מראש של התוצאה. אתם יכולים לרצות לקבל ערכים בדידים של החודש, היום, השנה וכו', שאולי תרצו לעצב בדרך אחרת. כאשר אתם מזמנים את localtime מתוך הקשר לרשומה (list context) - ומשימים את הערכים המוחזרים לתוך מערך - אתם מקבלים את הזמן פרוס לחתיכות קטנות.

קריאה ל localtime בהקשר רשומתי תניב את הערכים הבאים בסדר הבא:

אובייקטי הרשומה המוחזרים ע"י localtime (או gmtime)

הערות

ערכים

תאור

אינדקס רשומה

 

0-59

שניות

0

 

0-59

דקות

1

 

0-23

שעות

2

 

1-31

היום בחודש

3

0=ינואר, 11=דצמבר

0-11

חודש

4

הערך בשנה אינו בעל 2 ספרות, אלא השנה הנוכחית פחות 1900, כך ש 105 משמעו שנת 2005 (1900+105), לפיכך ב Perl אין באג 2000.

מינוס 1900

שנה 5
0=יום ראשון, 6=יום שבת

0-6

היום בשבוע 6
 

0-364

היום בשנה 7
1 (אמת) אם התאריך נופל בזמן שעון קיץ, 0 אחרת

0 או 1

דגל לשעון קיץ 8

על כן, אחת הדרכים לתפיסת כל הערכים היא השמת localtime לרשומה של משתנים סקלרים:

($seconds,$minutes,$hour,
 $monthday,$month,$year,
 $weekday,$yearday,$dst_flag)=localtime(time);

לגישה זו יש שתי בעיות: ראשית כל, Perl מחזירה ערכים כמו יום בשבוע וחודש בצורה נומרית, ולא בשמות, מה שאינו נוח למשתמש האנושי. שנית אתם לא חייבים להיות מעונינים בכל חתיכות האינפורמציה, ולכן אין לכם צורך ביצירת משתנים אשר לעולם לא תשתמשו בהם (כמו למשל dst_flag$).

דרך חכמה לקבלת החודש ולתרגם אותו מיידית לשמו היא שימוש ברשומה מקוננת ("nested list reference"), שימו לב:

$day=(Sunday,Monday,Tuesday,
      Wednesday,Thursday,Friday,Saturday)[(localtime(time))]

הקטע הקודם נסוב סביב "מערך אנונימי", רשומה של ימי השבוע אשר אינה מושמת לתוך משתנה רשומה מסוים. אנו מגדירים אלמנט ספציפי במערך, למשל "[localtime(time))[6)". . . כאשר localtime בתורה מחזירה רשומה של משתנים הנראים בטבלה הקודמת, וכאשר אנו מבקשים את האינדקס 6, אנו מקבלים את היום בשבוע. ניתן להשתמש בטריק זהה לקבלת שם החודש.

$month=(January,February,March,
      April,May,June,July,
      August,September,October,
      November,December)[(localtime(time))[4]];

למרות ששתי הדוגמאות שראינו מתבססות על הזמן הנוכחי (time), אתם יכולים להשתמש בכל זמן תקופה שתרצו.

דרך אלטרנטיבית לשימוש בפונקצית ה localtime (או gmtime) היא שימוש במודול Time::localtime, אשר נכלל בחבילה הסטנדרטית של Perl. מודול זה עובד כמעט באותה צורה כמו localtime אולם מאפשר דרך קלה יותר לאיסוף חלקי הזמן.

use Time::localtime;
$tomorrow=time+86400;
$timeVar=localtime($tomorrow);
$day=(Sunday,Monday,Tuesday,
      Wednesday,Thursday,Friday,Saturday)[$timeVar->wday];
      

שימו לב שבסקריפט למעלה אנו מבצעים השמה של localtime למשתנה סקלרי - ממשתנה זה אתם יכולים לקרא למתודות אשר יחזירו את המידע הרלוונטי, כמו לדוגמא - היום בשבוע (timeVar->wday$). המידע מוחזר בערכים נומריים, כך שאנו עדיין זקוקים לטריק של "המערך האנונימי" לתרגום ערך זה לשם היום. היתרון מצוי בעובדה שאתם עדיין יכולים לקרא לפרק זמן בודד בשמו, בלא להזדקק לרשומת המופעים. בשימוש באובייקט ה localtime אתם יכולים לקרוא למתודות הבאות, כאשר כל אחד מהערכים הבאים הוא בעל אותו טווח ואותה משמעות כמו לאלו המצויים בפונקציית ה localtime שראינו בטבלה הקודמת. מתודות באובייקט ה localtime sec שניות min דקות hour שעות mday יום בחודש mon חודש year שנה wday יום בשבוע yday יום בשנה isdst דגל שעון קיץ

זכרו שהמודול Time::localtime מכוון את הזמן ע"פ אזור הזמן שלכם. אתם יכולים להשתמש ב Time::gmtime כאלטרנטיבה לפונקציית ה gmtime באם אתם דבקים בזמן ה - GMT.

מתודות של אובייקט ה localtime

sec

שניות
min דקות
hour שעות
mday יום בחודש
mon חודש
year שנה
wday יום בשבוע
yday יום בשנה
isdst דגל שעון קיץ

זמן ידידותי למשתמש
תוכן עניינים
להפוך את הזמן

אודות
תוכן עניינים
פרק 1: ה Perl שאתם צריכים לדעת
פרק 2: קישור Perl לעמודי הרשת
פרק 3: שמירת מצב
פרק 4: HTML בחטף ותבניות (Templates) רשת
פרק 5: עיבוד וניתוח של עמודי רשת
פרק 6: להשתעשע עם בסיסי נתונים מקוונים:אקסס
פרק 7: המודל MySQL
פרק 8: להשתעשע בבסיסי נתונים - GUFE - החזית הכללית והשימושית
פרק 9: המילניום - ניהול זמן ותאריך
זמן ידידותי למשתמש  
הזמן בפרוסות  
להפוך את הזמן  
התעמלות עם Date::Manip  
התעמלות עם לוח שנה  
סיכום  
פרק 10: ניהול רשימות והאשים (Hashs)
פרק 11: הפניה להפניה
פרק 12: הכרות עם mod_perl