בחזרה לעמוד הבית

תאריך ושעה בפלאש 5

מטרת השיעור - הכרות עם אובייקט התאריך בפלאש 5.
ידע נדרש עבודה עם משתנים



להורדת קובץ דוגמא - לחץ כאן


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

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

את אובייקט התאריך נמצא בתפריט האובייקטים שבחלון ה - Actions.



את רשימת הפקודות אפשר לחלק לשני חלקים עיקריים - שליפת מידע מהתאריך (פקודות עם קידומת get) ופקודות לשינוי חלקים (פקודות עם קידומת set) בתאריך ששמרנו אצלנו (ולא שינוי הנתונים שבשעון המחשב) .
בשיעור זה נתמקד רק בפקודות השימושיות ביותר לשליפת נתונים רלוונטים לשעה ותאריך, אך צורת השימוש בפקודות חוזרת על עצמה, כך שאין טעם לפרט לגבי כל פקודה ופקודה. באופן כללי - לכל חלק באוביקט התאריך ישנה פקודה מתאימה שמחזירה (או משנה) אותו, כך שיהיה ניתן לעבד כל חלק בנפרד, כאשר ישנה הפרדה בין הזמן האזורי של כל ארץ (לפי קו אורך על כדור הארץ) והזמן לפי הזמן האוניברסלי ("שעון גריניץ'"). לידע כללי, הזמן בישראל מחושב כשעתיים מאוחר יותר מהשעה האוניברסלית.

הקוד שיוצר את השעון הדיגיטלי נרשם בפריים הראשון במוביקליפ שבדוגמא והוא חוזר על עצמו כל 12 פריימים (כל שניה).
		tempTime = new Date();
		myHour = tempTime.getHours();
		myMin = tempTime.getMinutes();
		mySec = tempTime.getSeconds();
		if (mySec<10) {
		    mySec = "0" add mySec;
		}
		if (myMin<10) {
		    myMin = "0" add myMin;
		}
		this.secRadius._rotation = mySec*6;
		this.minRadius._rotation = mymin*6;
		this.hourRadius._rotation = myHour*30+(myMin*6)/12;
בכל 12 פריימים (כל "סיבוב" של המוביקליפ) אנחנו יוצרים אובייקט תאריך חדש, ומעדכנים את המשתנה tempTime, שמכיל את התאריך המלא.
		tempTime = new Date();
שורות אלו הן בעצם החלוקה לשניות, דקות ושעות. שורות אלו מספקיות על מנת ליצור שעון בסיסי.
		myHour = tempTime.getHours();
		myMin = tempTime.getMinutes();
		mySec = tempTime.getSeconds();
התנאים נרשמים רק לשם "תיקון" המראה של השעון - אם מספר השניות/דקות קטן מ - 10, התוצאה תהיה ספרה אחת, כך שאנחנו חייבים להוסיף "0" כטקסט לפני הספרה שקיבלנו.
		if (mySec<10) {
		    mySec = "0" add mySec;
		}
		if (myMin<10) {
		    myMin = "0" add myMin;
		}
שורות אלו קובעות את זויות המחוגים בשעון האנלוגי - הן מיותרות לחלוטין במידה ולא משתמשים בשעון אנלוגי.
בעיגול יש 360 מעלות ולכן קידום המחוגים צריך להיות כל פעם בחלק המתאים - לדוגמא, יש 60 שניות בדקה ולכן נרצה לחלק את המעגל ל 60 - כלומר כל פעם קידום ב 6 מעלות.
יוצא דופן הוא מחוג השעות שאותו צריכים לקדם גם בהתאם למספר הדקות. הקידום הוא בחלקיקים של 30 מעלות (12 חלקים) וצריכים להוסיף את החלק של הדקות מהעיגול השלם (שעה שלמה - 360 מעלות) בחלוקה ל 12 על מנת שנקבל רק את הזוית שבין כל שעה.
		this.secRadius._rotation = mySec*6;
		this.minRadius._rotation = mymin*6;
		this.hourRadius._rotation = myHour*30+(myMin*6)/12;
השורה האחרונה מטפלת בהצגת התאריך (השורה צריכה להיות רשומה כשורה רציפה).
myDate = tempTime.getDate() add "/" add (tempTime.getMonth()+1) 
         add "/" add tempTime.getFullYear();

את התאריך למעשה שרשרתי ללא שימוש במשתני ביניים - אין הבדל משעותי בין שתי השיטות - רק הרגלי עבודה שונים.
יש לשים לב לשיטת חישוב החודש - אובייקט התאריך סופר את החודשים החל מ - 0 (ינואר - 0, פברואר -1 וכו') ולכן יש להוסיף 1 על מנת לקבל את מספר החודש ה"מוכר" לנו.

									בהצלחה