חידון: 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)קריאה ל־Date() ללא new חוקית ומתעלמת מכל הארגומנטים. היא מחזירה מחרוזת של התאריך והשעה הנוכחיים בזמן המקומי, ולא אובייקט Date או את התאריך שהועבר. השתמשו ב־new Date(...) כדי ליצור אובייקט לפי הארגומנטים.
בהנחה שההיסט המקומי בתאריך הנתון הוא GMT−07:00, מה יודפס?
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().
בהנחה שההיסט המקומי בתאריך הנתון הוא GMT−07:00, מה יודפס?
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() אינה חלק מתקן ECMAScript. לקוד נייד, השתמשו במתודת עיצוב תקנית כגון toLocaleDateString() או toLocaleString().
בדוק את המתודה toLocaleDateString תיעוד. ההתנהגות שלה מתועדת תחת Intl.DateTimeFormat.
מה הפלט יכלול?
var date = Date.UTC('2020-01-02T00:00')console.log(date.toUTCString())Date.UTC() מצפה לרכיבי תאריך מספריים ומחזירה מספר, לא אובייקט Date. כאן המחרוזת אינה שנה מספרית, ולכן מוחזר NaN. הניסיון לקרוא על המספר את toUTCString() זורק TypeError.
מה יכלול הפלט?
const d = Date.UTC(2020, 0, 1)console.log(d)שיטת העזר Date.UTC אינה מחזירה מופע תאריך. היא מחזירה מספר שלם במילישניות.
בהנחה שההיסט המקומי בתאריך הנתון הוא GMT−07:00, מה יודפס?
// Assume local TZ is -07:00const d = new Date(Date.UTC(2020, 0, 1))console.log(d.getTimezoneOffset())בהיסט מקומי GMT−07:00, getTimezoneOffset() מחזירה 420 דקות: UTC פחות הזמן המקומי. ההיסט עשוי להשתנות לפי התאריך בגלל שעון קיץ וכללים היסטוריים. אובייקט Date שומר חותמת זמן במילישניות, ולא אזור זמן; השיטות המקומיות משתמשות באזור הזמן של סביבת הריצה.
איזה תאריך מקומי מייצג האובייקט? פורמט התצוגה בקונסולה עשוי להשתנות.
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 (ינואר).