16-04-2005, 18:01
|
|
|
חבר מתאריך: 21.09.02
הודעות: 408
|
|
אם לא אכפת לך שימי, אני אחזור לדברי המקוריים ואחלוק אליך. במידה ואתה רוצה לעשות שעון זז שיקבל את הזמן מהשרת ולא מהלקוח, אז ישנו הצורך לשלב בין PHP וJS.
השימוש ב unix timestamp הוא חשוב כי יש לך רק פעם אחת לעביר נתונים מ PHP לתוך קוד הJS, ואתה צריך לעביר נתונים ש JS תוכל להמשיך להתעסק איתם. unix timestamp הוא מושלם לעבודה מכיוון שהוא מחזיר שניות וכמובן שזה דבר גלובלי בכל שפות התיכנות.
אז דיברתי כבר עם yahelb וחשבתי שאת הפיתרון אולי עוד אנשים ירצו לראות, אולי זה יוכל לעזור או ללמד מישהו, עכשיו או בעתיד. כמובן שאני נגד לזרוק סתם שורות קוד לאוויר, אז אני אנסה להסביר כמה שאני יכול את הפעולות של הפונקציה.
קוד PHP:
<html> <head> <?php $time=gmmktime()%86400; echo <<<END <script language="javascript"> var curdate=$time; function serverclock() { curdate++; if(curdate==86400) curdate=0; var time=curdate; var hours=Math.floor(time/3600); time=time%3600; var minutes=Math.floor(time/60); time=time%60; var seconds=time; if (minutes<10) minutes="0"+minutes; if (seconds<10) seconds="0"+seconds; var timestring=hours+":"+minutes+":"+seconds; document.getElementById("clock").innerHTML=timestring; setTimeout("serverclock()",1000); } </script> END; ?> </head> <body onload="serverclock()"> <span id="clock"></span> </body> </html>
דבר ראשון ישנו לשמור את הזמן ב unix timestamp לתוך משתנה, וכאן time נכנס לתמונה. אך מכיוון שאנחנו רוצים את הזמן המדוייק, ו time מחזירה זמן לפי GMT 0, יש צורך להשתמש ב gmmktime. אני שומר בתוך משתנה time את התשובה שהמודולס של ה unix timetsamp עם 86400 מחזיר. 86400 היינו מספר השניות ביממה והעיקרון של הפעולה הוא כדי לשמור אך ורק את מספר השניות מתחילת היום הנוכחי (מחצות). לאחר מכן מתצבעת הדפסה של הסקריפט ב JS ע"י PHP. שימוש ב END בתוך התגית echo מאפשר לרשום את כל הטקסט מבפנים ללא צורך לדאוג למרכאות. יותר על זה ניתן לקרוא ב php.net. מה שאני קורה לאחן מכן הוא שהזמן בשנית מתחילת היום מושם במשתנה JS, חשוב לציין, מחוץ לפונקציה בתור משתנה גלובלי. הפונקציה עצמה כבר מוציאה מאותו משתנה את מספר השעות, דקות ושניות, אך לא משנה את המשתנה המקורי. הוא משתנה רק בתחילת הקריאה כאשר מגדילים אותו באחד. מכיוון שהפונקציה קוראת לעצמה כל שניה, נוצר מצב שמספר השניות ביום מתעדכנות אוטומטית ביחד עם פעולת הסקריפט.
החלק הזה של התנאי:
קוד PHP:
if(curdate==86400) curdate=0;
אמור לזהות מתי יום התחלף, ובמידה וזה קורה, הוא מאפס את מספר השניות ביום ומתחיל מהתחלה.
אם יש עוד שאלות הוא משהו, אתם מוזמנים לשאול. אם יש שאלות בקשר לקוד JS, אתם גם מוזמנים לשאול, פשוט לא היית בטוח אם זה קשור לפורום או לא. בתימצות הפעולות ב JS שבהן המשתמשתי מאוד דומות, ברובן, לדרך הפעולה בPHP, כך שאפשר להבין מה כל דבר עושה, ואיך מתבצע החישוב.
|