חידון: 14 שאלות על תאריכים ב-JavaScript
למד להרשים במסיבות עם טריווית JS! ✨
עד כמה אתה מכיר את המחלקה Date?
- הוכיח את כישורי ה-JavaScript שלך! 🚀
- אין צורך בהתחברות או הרשמה. ✨
- בחירה מרובה. 🤖 … כמה קשה זה יכול להיות, הא?
סקירה כללית
למחלקת Date ב-JavaScript יש API ידוע לשמצה שקשה לעבוד איתו. היא ירשה מ-Java, ואני יכול רק להניח שהיא נוצרה בהשראת שיטות ספירת זמן נאוליתיות עתיקות.
המאבק להבין את Date מוביל מפתחים רבים להשתמש בספריות צד שלישי ללא שאלה. למרות שזו לרוב בחירה בטוחה ואמינה, ספריות אלו כמעט ואינן נחוצות לעיצוב תאריכים או לוקליזציה!
החידון הזה נועד לבחון (ולהעמיק) את הידע שלך ב-API המקורי של Date. השתמש בכפתורים הירוקים לרמזים והסברים! בתקווה שעד סוף האתגר תגבש את ההבנה שלך לגבי Date ב-JavaScript.
הערה: כל הדוגמאות מניחות אזור זמן מקומי GMT-7.
👇 14 שאלות למטה 👇
מה יכלול הפלט?
const d1 = new Date(2020, 1, 1)console.log(d1)הארגומנט של החודש הוא מבוסס אפס. הטווח הוא 0-11 (בשימוש בלוחות שנה מערביים).
ל’פברואר’ יש ערך אינדקס של אחד. (תחשוב על זה כמו חיפוש במערך.)
מה יכלול הפלט?
const d2 = new Date(2020, 0, 1)console.log(d2)ארגומנט החודש מבוסס אפס. עם טווח של 0-11 (בשימוש בלוחות שנה מערביים).
ל’ינואר’ יש ערך אינדקס של אפס. (תחשוב על זה כמו חיפוש במערך.)
מה יכלול הפלט?
const d3 = Date('Thu, 01 Jan 1970 00:00:00 GMT')console.log(d3)אל תשכח את מילת המפתח new! Date היא מחלקה, ויש לקרוא לה עם new.
Date('...') ללא new מתעלם ממה שאתה נותן לו. נראה שהוא תמיד מייצר את התאריך והשעה הנוכחיים עם new Date() (ללא ארגומנטים).
זוהי מלכודת נפוצה שקל להתעלם ממנה, אפילו בסקירת קוד.
מה יכלול הפלט?
const date = new Date(2020)console.log(date.getFullYear())מופע Date שנוצר עם ארגומנט יחיד מסוג מספר שלם מתפרש כערך Unix Epoch. Epoch הוא ספירת מילישניות מאז 1 בינואר 1970.
ערך של 2020 (מילישניות) מתורגם ל-2 שניות אחרי 1 בינואר 1970.
לאחר מכן, מאחר שאזור הזמן המקומי שלנו הוא אופסט שלילי של 7- שעות, אנחנו מקבלים Wed Dec 31 1969 17:00:02 GMT-0700 (Mountain Standard Time).
ניתן לעקוף את אופסט אזור הזמן המקומי על ידי שימוש ב-.getUTCFullYear().
איזה ערך יודפס לקונסולה?
const d1 = new Date('2020-01-01')const d2 = new Date('2020-01-01T00:00')console.log(d1.getFullYear(), d2.getFullYear())המחרוזת ללא ערך זמן T עשויה להיראות כ-1 בינואר 2020 - אבל מחרוזות תאריך בלבד מתפרשות כ-UTC, וכאשר מותאמות לאזור הזמן המקומי שלנו (GMT-7) אנו מגלים שאנחנו עדיין ב-2019.
מחרוזות תאריך-זמן ללא אזור זמן מפורש מתפרשות בזמן מקומי.
הצורה T00:00 גורמת לערך השני להתפרש כחצות מקומי.
התאריך הראשון מתפרש כ-Tue Dec 31 2019 17:00:00 GMT-0700 (Mountain Standard Time).
התאריך השני מתפרש כ-Wed Jan 01 2020 00:00:00 GMT-0700 (Mountain Standard Time).
בחר שיטת עיצוב שגויה:
המתודה toLocaleFormat() אינה סטנדרטית! היא עשויה להיראות מוכרת כי היא מספרייה צד שלישי עתיקה.
בדוק את המתודה toLocaleDateString תיעוד. ההתנהגות שלה מתועדת תחת Intl.DateTimeFormat.
מה הפלט יכלול?
var date = Date.UTC('2020-01-02T00:00')console.log(date.toUTCString())תקבל TypeError: date.toUTCString is not a function, מכיוון ש-Date.UTC() מחזירה מספר שלם במילישניות, ולא אובייקט תאריך.
מה יכלול הפלט?
const d = Date.UTC(2020, 0, 1)console.log(d)שיטת העזר Date.UTC אינה מחזירה מופע תאריך. היא מחזירה מספר שלם במילישניות.
מה יכלול הפלט?
// Assume local TZ is -07:00const d = new Date(Date.UTC(2020, 0, 1))console.log(d.getTimezoneOffset())אובייקטי Date יוצגו באופן ברירת מחדל בשעה המקומית, עם .getTimezoneOffset() שאינו משתנה (למעשה).
אובייקטי Date אינם מאחסנים נתוני אזור זמן. הם מאחסנים את מספר המילישניות מאז תקופת יוניקס (1 בינואר 1970). אזור הזמן נלקח בחשבון בעת ניתוח ועיבוד מחרוזות תאריך. התנהגות התצוגה ברירת המחדל נקבעת אוטומטית על פי הגדרות האזור של המערכת או הדפדפן.
מה יכלול הפלט?
const d = new Date(2020, 0, 1)d.setDate(1)console.log(d)המתודה .setDate() קובעת את היום בחודש, בהתבסס על החודש הנוכחי של המופע הנתון.
אם ניתן ערך מחוץ למספר הימים הזמינים, ערך החודש של מופע התאריך יתכוונן (לדוגמה, setDate(32) בינואר יחושב כ-1 בפברואר).
מה יכלול הפלט?
const d = new Date(2020, 0, 1)d.setMonth(1)console.log(d)המתודה .setMonth() קובעת את החודש של מופע התאריך הנתון.
הארגומנט של החודש הוא מבוסס אפס, בטווח 0-11 (בשימוש בלוחות שנה מערביים).
מה יכלול הפלט?
const d = new Date(2020, 0, 1)d.setMonth(12)console.log(d)המתודה .setMonth() קובעת את החודש של מופע התאריך הנתון.
הארגומנט month מבוסס על אפס, עם 12 ערכים בטווח 0-11 (בשימוש בלוחות שנה מערביים).
כאן אנו רואים שהשנה מותאמת ל-2021, מכיוון ש-setMonth(12) הוא 1 יותר מ-11 (דצמבר).
מה יכלול הפלט?
const d = new Date(2020, 0, 1)d.setMonth(13)console.log(d)השיטה .setMonth() קובעת את החודש של מופע התאריך הנתון.
ארגומנט החודש מבוסס על אינדקס החל מ-0, בטווח 0-11 (בשימוש בלוחות שנה מערביים).
כאן אנו רואים שהחודש והשנה מותאמים לפברואר 2021, כי setMonth(13) הוא 2 יותר מ-11 (דצמבר).
מה יכלול הפלט?
const d = new Date(2020, 0, 1)d.setMonth(-1)console.log(d)המתודה .setMonth() קובעת את החודש של מופע התאריך הנתון.
ארגומנט החודש מבוסס אפס, עם טווח של 0-11 (בשימוש בלוחות שנה מערביים).
כאן אנו רואים שהחודש והשנה מתגלגלים חזרה לדצמבר 2019, מכיוון ש-setMonth(-1) קטן מ-0 (ינואר).