Deprecated: Creation of dynamic property CF\WordPress\DataStore::$logger is deprecated in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php on line 23

Deprecated: Creation of dynamic property CF\WordPress\Proxy::$pluginAPI is deprecated in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/Proxy.php on line 31

Deprecated: Creation of dynamic property SyntaxHighlighter::$brush_names is deprecated in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/syntaxhighlighter/syntaxhighlighter.php on line 248

Deprecated: Creation of dynamic property SyntaxHighlighter::$specialchars is deprecated in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/syntaxhighlighter/syntaxhighlighter.php on line 326
המכללה | הצגת תאריך ושעה בעזרת JavaScript
Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

הצגת תאריך ושעה בעזרת JavaScript

time, cc-by apesara, flickr
time, cc-by apesara, flickr

אני לא יודע למה, אבל עד לפני כמה ימים הייתי משוכנע שלוורדפרס יש פונקציה שמסוגלת להציג את הזמן הנוכחי. אני זוכר שבזמנו היה תוסף שנקרא "כמה זמן עבר" שהציג את הפרש הזמן מרגע כתיבת התגובה או הפוסט אליו שויכו ועד עכשיו והנחתי שהוא עושה שימוש בפונקציה של וורדפרס. טעיתי, כך מסתבר, אומנם לוורדפרס יש פונקציות שיודעות להציג זמנים, אבל הן מתיחסות לזמן של כתיבת פוסטים או תגובות שנשמר במסד הנתונים, לא לזמן הנוכחי. בטח גם לא הייתי עולה על זה עד עכשיו אלמלא לקוח שאני עובד איתו רצה להציג בדף הראשי של האתר שלו את היום, התאריך והשעה, אחרי מאבקים קצרים עם הקודקס של וורדפרס הרמתי ידיים ועברתי לג'אווה סקריפט – קצר ופשוט.

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

var d=new Date();

הפונקציה getDay היא פונקציה שמחזירה כערך מספר בטווח 0-6 כאשר כל אחד מהם מסמל יום בשבוע (מיום ראשון (0) עד שבת (6)). כמובן שזה לא ממש עוזר לנו כשאנחנו רוצים להדפיס את שם היום ולכן נבנה מערך עזר קטן:

var weekday=new Array(7);
weekday[0]="א'";
weekday[1]="ב'";
weekday[2]="ג'";
weekday[3]="ד'";
weekday[4]="ה'";
weekday[5]="ו'";
weekday[6]="ש'";

השימוש במערך ביחד עם getDay מאפשר לנו לקבל בקלות את הערך הטקסטואלי שבחרנו ליום הספציפי.

weekday[d.getDay()];

הפונקציות getFullYear, getMonth ו getDate מחזירות את הערך של השנה, היום והחודש בתאריך הלועזי. אך היות ואנחנו רוצים לשמור על מבנה אחיד אנחנו עלולים "להיתקע" בימים / חודשים בעלי ספרה בודדת (1-9), זה ההבדל בין 01.04.2009 לבין 1.4.2009. השלב הבא הוא כמובן אינו חובה, אבל הוא יעזור לנו לייצר את התאריך בפורמט הרצוי לנו.

var month ="";
if (d.getMonth()<10)
	month = "0" +d.getMonth();
else
	month = d.getMonth();
var day ="";
if(d.getDate()<10)
	day =  "0" + d.getDate();
else 				
	day = d.getDate();

היות והזמן נמדד לפי GMT, יש חשיבות לגבי הפרש השעות בין GMT לזמן המקומי. כרגע אנחנו נמצאים ב Gmt+3 אם כי זה מדלג ל 2+ בתלות בשעון חורף, שעון קיץ ושאר העולם. לכן, נשלוף את הפרש הזמנים בין הזמן המקומי ל GMT ונוסיף לשעה שמחזיר אובייקט התאריך. חשוב לשים לב שהפונקציה getTimezoneOffset מחזירה ערך בסימן הפוך מהמצופה, כלומר למרות שאנחנו ב gmt+3 הפונקציה תחזיר כתשובה 3- שכן היא מחסרת את GMT מהזמן המקומי ולא להפך. לכן, כשמוסיפים את ההפרש לשעה צריך למעשה לחסר אותו מהשעה.

var hour = d.getTimezoneOffset();
var newHour = (d.getUTCHours() - hour/60)%24 ;

היות ואנחנו מבצעים פה חיבור פשוט, יכול להיווצר מצב שבו נקבל שעה שהיא יותר גדולה מחצות. אם למשל השעה היא 23:00 ועל זה נוסיף 3 שעות נגיע אל 26:00. הפעולה %24 מחזירה את השארית של חלוקה ב 24, כלומר שבמקרה שלנו השארית מחלוקת 26 ב 24 היא 2, שזו השעה הנכונה. ושוב, כמו עם התאריך, בגלל סיבות של שעות / דקות הקטנות מ 10 עלולה להתקבל תצוגה 1:8 עבור השעה אחת ושמונה דקות, קצת מכוער ולכן נוסיף את האפס במקרים הללו.

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

var str = "יום ";
str += weekday[d.getDay()];
str += " " + day +"/" + month  + "/" + d.getFullYear() ;
str +=" " + newHour+ ":" + d.getUTCMinutes();

כרגע יש לנו משתנה בשם str שמכיל מחרוזת ארוכה עם התאריך שלנו, אבל עדיין אינו מציג אותה. על מנת להציג את המחרוזת נוסיף לקוד ה HTML בעמוד DIV חדש בעל שם יחודי.

ונוסיף לסקריפט שלנו הוראה לעדכן את התוכן של mainDate.

document.getElementById('mainDate').innerHTML = str;

חשוב לציין שכדי שהטקסט יופיע במקום הרצוי לנו. צריך לדאוג שהסקריפט יופיע אחרי המיקום של ה DIV שכן אם הסקריפט יופיע לפניו הוא ירוץ לפני שהאובייקט יווצר ולכן הטקסט לא יופיע. מי שנוהג לשמור את הסקריפטים שלו בסוף הקוד לא צריך לדאוג בקטע הזה. מי שמעדיף לשמור את הסקריפטים שלו בתחילת העמוד (בקטע של ה head) מוטב יעשה אם ישתמש ב window.onload שיקרא לפונקציה שלו בסוף העמוד.

מי שרוצה להוריד את הסקריפט המלא ימצא אותו כאן

לדרג את הפוסט
4

Posted

in

by

Comments

4 תגובות על “הצגת תאריך ושעה בעזרת JavaScript”

  1. תמונת פרופיל של דרומי

    למה לא להשתמש פשוט ב-date() של פהפ?

    1. תמונת פרופיל של ~ניצן~

      שתי סיבות – האחת כי PHP רצה על השרת בעוד שהג'אווה סקריפט רץ על המחשב של המשתמש. בצורת הג'אווה סקריפט הזמן יוצג נכון בכל מחשב ללא תלות באזור הזמן בה הוא ממוקם בעוד שבעזרת PHP אני אקבל פלט אחיד שתלוי בזמן של השרת, כמו גם שזה מוריד מהעומס על השרת.

      הסיבה השניה היא שבעזרת JS אין לי תלות בסביבת הפיתוח. היום אני עובד על PHP, מחר על ASP ומחרתיים על רובי – דרך ג'אווה סקריפט אני חוסך לעצמי מימוש כפול של אותה הפונקציה.

  2. תמונת פרופיל של דרומי

    אמממ… בהתחלה אמרת שחיפשת בפונקציות של וורדפרס, לא? אין פונקציה כזו של וורדפרס, כי פהפ יודע לעשות את זה לבד.

    1. תמונת פרופיל של ~ניצן~

      נכון, בהתחלה חיפשתי דרך לעשות את זה דרך וורדפרס, אחרי שהבנתי שאין וכיצד עובד ה date של php הבנתי שעדיף לי לבצע את זה בעזרת JS.

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *


Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79

Warning: Cannot modify header information - headers already sent by (output started at /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/DataStore.php:23) in /home/nitzan_n2b/n2b.org/wordpress/wp-content/plugins/cloudflare/src/WordPress/HTTP2ServerPush.php on line 79