לוח שנה
תוכנית זו מציגה לוח שנה עדכני. התוכנית מציגה כל חודש בנפרד ומסמנת באופן אוטומטי את התאריך העכשווי. ניתן לדפדף חודש קדימה ואחורה בלחיצת כפתור, ואף ישנה אפשרות לחפש תאריך מסויים לפי יום חודש ושנה. מתחת ללוח מופיע כל הזמן התאריך הנוכחי האמיתי.
הערות:
ללא שימוש בקבצי מידע או בסיס נתונים. שימוש בפונקציות של תאריך וזמן. אין שימוש רב בפונקציות ועיקר הסקריפט הוא לולאות והדפסת פלט.
שימוש בפונקציות:
getdate() isset() mktime()
calendar.php - הקובץ הראשי של התוכנית. מציג את הלוח של החודש ומבצע חיפוש של תאריך מסויים.
calendar_conf.inc - קובץ ההגדרות של התוכנית בראש הקובץ calendar.php.
תוכנית זו לא מצריכה התקנה מסובכת והשימוש בו הוא פשוט. ניתן לשנות את שמות הימים והחודשים בעברית בקובץ ההגדרות calendar_conf.inc. בנוסף ניתן לשנות את הצבעים של סימון היום הנוכחי, של היום שמחפשים, של יום שבת ואת צבע ברירת המחדל של יום רגיל. כדי להשתמש בסקריפט כל שעליכם לעשות הוא לכלול את הקובץ calendar.php במקום שבו אתם רוצים להשים את לוח השנה. תוכלו גם לשנות את העיצוב והגרפיקה של לוח השנה, אך זה דורש הצצה ארוכה יותר בקוד.
בתחילה אנו מייבאים את קובץ ההגדרות calendar_conf.inc. כעת בודקים אם קיבלנו תאריך לחפש. $cal_today
מכיל את התאריך של היום. הפונקציה getdate() מחזירה מערך ובו נתונים על הזמן שמצויין בארגומנט שאותו הוא מקבל, או הזמן הנוכחי במידה ולא צויין הזמן. אם התוכנית נתבקשה לחפש תאריך מסויים, בודקים אם שדות השנה והחודש מולאו, ואם לא אז מכוונים אותם לשנה ולחודש העכשוויים. אם היום צויין אז מחפשים את אותו היום, ואם לא אז מחפשים את היום הראשון (על-מנת להגיע לחודש ולשנה שצויינו), והיום המבוקש שונה ל-0 (כדי לא לסמן יום כלשהו מאוחר יותר). את התאריך המבוקש (שאותו אנו מציגים) נשמור במשתנה $cal_sr_date
.
עכשיו מתחילים להדפיס את לוח השנה ונעזרים בטבלאות. בשורה הראשונה אנו מדפיסים את הכפתורים של החודש הבא והקודם כשבאמצע מופיע החודש והשנה של הטבלה. בשורה הבאה אנו מדפיסים את הטבלה של החודש עצמו, וכך נראה הקוד של טבלה זו:
<TABLE width=100% border=1 bgcolor="#DDDDDD" cellpadding=1 cellspacing=0>
<?php if (!
$cal_sr_date)
//if an error occured calculating the requested date
{
echo "<TR bgcolor=\"#000000\"><TD colspan=3 align=\"center\"><FONT color=\"#DD3322\">התאריך המבוקש חורג מן הגבולות או לא חוקי</FONT></TD></TR>\n";
//echo error message
$cal_sr_date=
$cal_today;
//show the current month of the date
$cal_day=
0;
//we don't mark any cell as the requested date
}
?>
<TR>
<?php foreach (
$cal_heb_days as $cal_heb_d)
//printing the days columns
echo "<TH bgcolor=\"#3333CC\" width=14% align=\"center\"><FONT color=\"CCCC00\" size=2>".
$cal_heb_d.
"</FONT></TH>";
?>
</TR>
<?php for (
$cal_d=
1,
$cal_wd=
0;
true;
$cal_d++,
$cal_wd=(
$cal_wd+
1)%
7)
//stopping the loop by break
{
$cal_tdt=
getdate(
mktime(
0,
0,
0,
$cal_sr_date[
"mon"],
$cal_d,
$cal_sr_date[
"year"]));
//temp date to hold the date represented by $cal_d
if (
$cal_tdt[
"mon"]!=
$cal_sr_date[
"mon"])
//if we got to the next month
break;
//stopping the loop
if (
$cal_wd==
0)
//if the first day of the week
{
echo "<TR>";
//making a new line in the table
while (
$cal_tdt[
"wday"]!=
$cal_wd)
//skipping the cells till the first day of the month
{
echo "<TD> </TD>";
//printing empty cell
$cal_wd++;
}
}
$cal_cell=
"<TD align=\"center\"";
//opening the cell
if (
$cal_action==
"finddate" &&
$cal_day==
$cal_d)
//if we search for a day and we got to that day
$cal_cell.=
" bgcolor=\"$cal_color_find_date\">";
//we mark the cell with purple background
else //otherwise, if we don't search for any day
$cal_cell.=
">";
//we use the default background of the table
$cal_cell.=
"<FONT";
//opening the font style of the cell
if (
$cal_sr_date[
"year"]==
$cal_today[
"year"] &&
$cal_sr_date[
"mon"]==
$cal_today[
"mon"] &&
$cal_d==
$cal_today[
"mday"])
//if we got to the current date
$cal_cell.=
" color=\"$cal_color_today\">";
//we mark the cell with red text color
elseif (
$cal_wd==
6)
//else if we got to saturday
$cal_cell.=
" color=\"$cal_color_saturday\">";
//we mark the cell with navy text color
else //otherwise, if it's a regular day
$cal_cell.=
" color=\"$cal_color_default\">";
//we use black text color
$cal_cell.=
$cal_d.
"</FONT></TD>";
//we add the day number and close the font and cell styles
echo $cal_cell;
//echoing the cell to the browser
if (
$cal_wd==
6)
//if the last day on week
echo "</TR>";
//we end the line in the table
}
?>
</TABLE>
בתחילה אנו בודקים אם היו תקלות כלשהן כאשר עיבדנו את המידע מהטופס שנשלח אלינו. באם היו תקלות, כאשר $cal_sr_date
מכיל ערך שקר, אנו מדפיסים הודעת שגיאה המסבירה כי הקלט לא חוקי או שאולי התאריך חורג מן הגבולות שהמחשב יכול לחשב. לאחר מכן אנו משנים את התאריך לתאריך העכשווי האמיתי כדי להציג את הטבלה של החודש הנוכחי, וכן משנים את $cal_day
ל-0 כדי לא לסמן יום מסויים בטבלה כיום שהמשתמש חיפש. שים לב שכאשר התוכנית מקבלת את הנתונים של התאריך המבוקש היא שומרת את התאריך במשתנה $cal_sr_date
, והיא יוצרת אותו באמצעות הפונקציות mktime() ו-getdate() (בתחילת הסקריפט), ופונקציות אילו מתייחסות באופן מיוחד לקלט שהוא לא הגיוני (או לא חוקי), כך שאת הטיפול בקלט לא נכון השארתי לפונקציות אילו, וגם במקרה שמזינים לפונקציות אילו מחרוזות תוים שלא מייצגים מספר חוקי, פונקציות אילו מחזירות תאריך מסויים ולא ערך שקר המסמן על שגיאה, על-כן בדר"כ הודעת השגיאה המותנית הזו תוצג כאשר חורגים מן הגבולות של התאריך שהמחשב יודע לחשב.
אם אין תקלות אז בשורה הראשונה של הטבלה הזו אנו מדפיסים את ימות השבוע לפי המערך המוגדר בקובץ ההגדרות, $cal_heb_days
. בשורות שבאות לאחר מכן אנו מדפיסים את המספרים של ימות החודש, וצובעים את התאריך הנוכחי ואת התאריך שמחפשים, והכל בעזרת לולאה. $cal_d
הוא היום של החודש, ו-$cal_wd
הוא היום בשבוע. בתוך $cal_tdt
אנו שומרים את המידע על התאריך של היום ה-$cal_d
בחודש הנוכחי ($cal_sr_date["mon"]
). במידה והחודש של התאריך הזמני שיצרנו ($cal_tdt
) שונה מן החודש שמוצג ($cal_sr_date
), אז אנו מפסיקים את הלולאה (שים לב שהתנאי בלולאה הוא TRUE
ולכן צריך לעצור אותה מבפנים באמצעות break
). אם זהו היום הראשון של השבוע ($cal_wd==0
), אז מדפיסים לדף תחילת שורה חדשה <TR>
, ובנוסף בודקים אם היום הראשון של השבוע (ושל החודש בכלל) מתחיל ביום אחר, ואם כך אנו מדפיסים תאים ריקים לטבלה (ומקדמים את היום בשבוע, $cal_wd
) עד שמגיעים ליום הנכון.
כעת אנו מוכנים להדפיס את התא שיכיל את היום בחודש ויהיה בצבע הנכון. המשתנה $cal_cell
יכיל בתוכו את המחרוזת שנדפיס לפלט דף ה-HTML. הוא יכיל תג שיורה לפתוח תא חדש בטבלה שהכתוב בו יהיה במרכז התא. עכשיו מבצעים בדיקות וצובעים את התא ואת הטקסט בהתאם. אם המשתמש מחפש תאריך מסויים באמצעות הטופס של לוח השנה (שאליו נגיע בהמשך ההסבר) והגענו אל היום המבוקש, אז אנו מוסיפים לתא מאפיין שיצבע את רקע התא בצבע שהוגדר, אחרת אנו סוגרים את התג. הבדיקה הבאה היא האם היום שהגענו אליו הוא התאריך העכשווי האמיתי, וזאת בודקים ע"י השוואת השנה, החודש והיום, ואם זהו אכן התאריך העכשווי אנו צובעים את הפונט בצבע שהוגדר. אם זהו לא התאריך העכשווי, אז בודקים אם זהו יום שבת ($cal_wd==6
), ואם כך אז צובעים את הפונט בצבע שמוגדר בקובץ ההגדרות. ולבסוף אם זהו סתם יום רגיל, אז צובעים את הפונט בצבע ברירת המחדל שמוגדר. בסופו של דבר מוסיפים למחרוזת $cal_cell
את המספר של היום בחודש, סוגרים את התגים, ומדפיסים את המחרוזת לפלט. בסוף הלולאה אנו בודקים אם הגענו ליום האחרון בשבוע, ואם כך, אז אנו מדפיסים תג שסוגר את השורה, ובאיטרציה הבאה אנו נדפיס תג לפתיחת שורה חדשה (במידה וישנה עוד שורה). בסוף כל איטרציה אנו מקדמים את היום בחודש ב-1 ($cal_d
), ואת היום בשבוע ($cal_wd
) גם מקדמים באחד אך עושים לו מודולו 7, כי הוא מספר שנע בין 0 ל-6.
מתחת לטבלה של החודש אנו מדפיסים את התאריך העכשווי האמיתי בצבע המוגדר לתאריך העכשווי באמצעות התאריך העכשווי האמיתי ($cal_today
) ובעזרת המערכים של ימות השבוע ושמות החודשים בעברית:
<TR bgcolor="#333333">
<TD colspan=3 align="center"><FONT color="<?= $cal_color_today; ?>"><SPAN dir="rtl"><?= "תאריך נוכחי: <B>יום ".$cal_heb_days[$cal_today["wday"]].", ".$cal_today["mday"]." ב".$cal_heb_months[$cal_today["mon"]].", ".$cal_today["year"]."</B>"; /* printing the current date */ ?></SPAN></FONT></TD>
</TR>
בשורה האחרונה, בתחתית, אנו מדפיסים טופס קטן שעוזר לחפש תאריך מסויים בצורה מהירה (במקום לדפדף חודש-חודש עד שמגיעים אליו). אנו משתמשים במשתנה חבוי בתוך הטופס שנקרא cal_action
, ומכיל בתוכו את הערך "finddate". בנוסף הוא מכיל 3 שדות: היום (שדה טקסט - $cal_day
), החודש (שדה בחירה - $cal_mon
) ושנה (שדה טקסט - $cal_year
). נוסיף גם כפתור שליחה, שישלח את המידע. ברירות המחדל של השדות בטופס יהיו היום, החודש והשנה של התאריך העכשווי.
הפונקצייה date | 01-12-03 10:02 חן | #667 |
| איך אני מציג את התאריך הישראלי?
תודה מראש |
|
איך אני מציג שעה של | 04-12-03 11:00 רן | #822 |
| ישראל עשיתי אצלי באתר שבניתי מערכת
<?echo date("h:m:s",time($sss["time"])); ?>
וזה לא מציג שעה כמו ישראל מה לעשות? |
|
זה מציג את התאריך והשעה בשרת | 04-12-03 11:00 אלי חן (מנהל) | #826 |
| הפונקציה date וכל הפונקציות הקשורות בזמנים עכשויים, אינן מציגות את התאריך והשעה המדוייקים על מחשב הלקוח.. אלא מציגים את התאריך והשעה על השרת!
אם קיבלת שהשעה לא מדוייקת, אז השעה במחשב השרת שלך שונה מהשעה אצלך בבית.. (תחשוב באיזו מדינה יושב השרת שלך)..
אם אתה רוצה להציג תאריך ושעה מדוייקים לפי מחשב הלקוח, אז תשתמש ב JavaScript שרץ על צד הלקוח, ולא ב PHP שרץ על צד השרת. |
|
איך ממירים מתאריך לועזי לעיברי? | 08-12-03 01:01 טל | #1025 |
| איך ממירים תאריך לועזי לעברי? אני יודע שענית לחן שזה נמצא באתר הרישמי אבל אני לא מוצא את התשובה
נ.ב.:לשאלה של רן אתה צריך כדי לכתוב את התאריך והשעה בשעון ישראלי:
<?
a_date=(h+2).":".m.":".s;
echo a_date;
?> |
|
תאריך עיברי (לחן) | 08-12-03 03:01 טל | #1029 |
| כדי לכתוב את התאריך העיברי אתה צריך לכתוב את הקוד הבה:
<?=jdtojewish(gregoriantojd(getdate())?>
וכדה להמיר מתאריך מסוים:
<?=jdtojewish(gregoriantojd(/*כאן תכתוב את התאריך*/)?> |
|
תחילת יממה עברית | 01-11-03 16:00 אליהו שלמה | #1256 |
| איך אני מציג את השעה שבה מתחילה היממה לפי היום העברי. למשל 11 לאוקטובר 1999 היה א חשוון אבל בערב זה התחלף ל ב חשוון באיזה שהעה בדיוק זה קרה? |
|
איך מקבלים תאריך עיברי(לא רק יהודי) | 05-12-04 04:02 טל חדד | #1582 |
| כאשר השתמשתי בjdtojewish() זה הציג לי רק במיספרים. איך עושים שזה יציג באותיות עיבריות? |
|