עזרה טכנית
Unix Timestamp בשניות מול אלפיות שנייה: למה התאריך מציג 1970
אם Unix timestamp הופך לתאריך ליד 1970, לרוב שניות נקראו כאלפיות שנייה. כך מבחינים בין היחידות.
אם Unix timestamp נותן תאריך ליד 1970, הערך לרוב מפורש ביחידה הלא נכונה.
Unix timestamps משתמשים בדרך כלל בשניות, וערכי Date ב-JavaScript בדרך כלל באלפיות שנייה.
חותמת זמן מודרנית בת 10 ספרות היא לרוב שניות, ובת 13 ספרות לרוב אלפיות שנייה. אם היחידות לא תואמות, אולי צריך להכפיל או לחלק ב-1,000.
המרתם חותמת זמן לתאריך והגעתם לינואר 1970. כמעט אף פעם זה לא שעון מקולקל. המספר נקרא כאלפיות שנייה כשהוא נשמר בשניות—או להפך.
מהו Unix timestamp?
Unix timestamp מודד זמן מאז Unix epoch: 1970-01-01 00:00:00 UTC. בדרך כלל בשניות שלמות. אפשר לשמור את אותו רגע גם באלפיות שנייה (שניות × 1,000). המספר עצמו לא מציין את היחידה.
שניות מול אלפיות שנייה: ההפרש פי 1,000
שנייה אחת שווה 1,000 אלפיות שנייה. השוו 1720000000 עם 1720000000000. אם הראשון שניות והשני אלפיות שנייה, זה אותו רגע. קוראים את הראשון כאלפיות שנייה — והתאריך קופץ לכיוון 1970.
תוצאות UTC האלה חושבו מהמספרים למעלה, לא נוחשו.
| ערך | יחידה סבירה | פירוש (UTC) |
|---|---|---|
| 1720000000 | שניות | תאריך מודרני כשקוראים כשניות: 2024-07-03 09:46:40 UTC |
| 1720000000000 | אלפיות שנייה | אותו רגע כשקוראים כאלפיות שנייה: 2024-07-03 09:46:40 UTC |
| 1720000000 כאלפיות שנייה | יחידה שגויה | תאריך ליד 1970: 1970-01-20 21:46:40 UTC |
למה ה-timestamp שלי מציג 1970?
אם ערך בשניות מטופל כאלפיות שנייה, המספר קטן פי 1,000 מהנדרש. JavaScript סופר אז רק קטע קצר אחרי Unix epoch, והתאריך נשאר ב-1970:
const seconds = 1720000000;
new Date(seconds);
// 1970-01-20 21:46:40 UTC
new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC
תאריך 1970 הזה הוא ה-epoch ועוד בערך שבועיים. הכפילו שניות ב-1,000 לפני שמעבירים אותן ל-Date.
- שניות
- 1720000000
- אלפיות שנייה
- 1720000000000
- ערך בשניות
- טופל בטעות כאלפיות שנייה
- תאריך ליד 1970
אם התוצאה ליד 1970, בדקו את יחידת חותמת הזמן לפני שבודקים אזור זמן.
האם 10 ספרות הן שניות ו-13 ספרות אלפיות שנייה?
בתאריכים מודרניים, 10 ספרות הן לרוב שניות ו-13 לרוב אלפיות שנייה. זה רמז מהיר, לא כלל אימות. מספר הספרות משתנה עם טווח הזמן, וחלק מממשקי API שומרים מיקרו־שניות או ננו־שניות. אשרו את היחידה מול תיעוד או תאריך הגיוני.
למה זה קורה כל כך הרבה ב-JavaScript
ב-JavaScript ערך Date מספרי הוא אלפיות שנייה מאז ה-epoch. הרבה בק־אנדים, מסדי נתונים וכלי Unix עדיין שומרים שניות. להעביר ערך בשניות ישר ל-Date זו שגיאה שכיחה:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
wrong ליד 1970 (1970-01-20 21:46:40 UTC). correct הוא הרגע המודרני (2024-07-03 09:46:40 UTC).
מערכות אחרות משתמשות ביחידות אחרות
שפות, API ומסדי נתונים אחרים עשויים להשתמש בשניות או באלפיות שנייה. חלק שומרים מיקרו־שניות או ננו־שניות. אל תניחו ששפה תמיד משתמשת ביחידה אחת—בדקו את התיעוד. אם המספר ב-JSON, עיצוב והשוואת JSON עוזר לקרוא את השדה; עדיין לא יגיד את היחידה.
איך לדעת באיזו יחידה ה-timestamp שלי?
עברו על הבדיקות האלה לפי הסדר. מספר הספרות לבדו לא מספיק.
- בדקו את תיעוד ה-API או מסד הנתונים.
- הסתכלו על מספר הספרות המשוער.
- השוו את הערך לחותמת זמן מודרנית סבירה.
- בדקו את הערך כשניות וכאלפיות שנייה.
- בדקו אם התאריך שהתקבל הגיוני.
אם פירוש אחד נוחת ב-1970 והשני בתאריך שאתם מזהים, חוסר ההתאמה ביחידה הוא הסיבה.
טעויות נפוצות ב-Unix timestamp
- שניות שפורשו כאלפיות שנייה. התאריך קורס לכיוון 1970, כמו בדוגמה למעלה.
- אלפיות שנייה שפורשו כשניות. התאריך קופץ רחוק לעתיד, או שההמרה נכשלת.
- הכפלה ב-1,000 פעמיים. ערך שכבר היה באלפיות שנייה הופך עצום והתאריך קופץ מאות שנים קדימה.
- חלוקה ב-1,000 פעמיים. ערך בשניות מצטמק שוב, שוב ליד 1970.
- להאשים את אזור הזמן. אזור יכול להזיז שעות או את יום הלוח. הוא לא מעביר חותמת זמן מודרנית ל-1970.
- לטפל במחרוזת תאריך מעוצבת כ-Unix timestamp. ערך כמו 2024-07-03T09:46:40Z אינו מספר epoch. פרסרו אותו כתאריך, לא כשניות.
האם אזור הזמן גורם לבעיית 1970?
בדרך כלל לא. אזור זמן יכול לשנות את השעון המוצג, וליד חצות את תאריך הלוח. הוא לא הופך Unix timestamp מודרני ל-1970. אם התוצאה ב-1970, בדקו קודם שניות מול אלפיות שנייה.
המירו ובדקו Unix timestamp
NEXNARA ממיר תאריך ושעה יכול להמיר Unix timestamp בדפדפן.
הדביקו שניות או אלפיות שנייה של Unix, השתמשו בחותמת הנוכחית, ראו UTC ושעה מקומית, המירו אזורי זמן ועיצבו תאריך. הזיהוי האוטומטי מתייחס לרוב ל-10 ספרות כשניות ול-13 כאלפיות שנייה; עדיין אפשר לבחור את היחידה.
ההמרה עצמה מתבצעת בדפדפן. הכלי הזה לא שולח תאריכים או חותמות זמן לשרת NEXNARA. פרסומות ותכונות אחרות באתר עדיין משתמשות ברשת; זה נפרד מההמרה.
צריך לבדוק Unix timestamp? פתחו ממיר תאריך ושעה והשוו שניות לאלפיות שנייה.
FAQ
למה ה-Unix timestamp שלי מציג 1970?
לרוב אלה שניות שנקראו כאלפיות שנייה. JavaScript מטפל במספר קטן בהרבה, ולכן התאריך יושב מעט אחרי 1970-01-01 00:00:00 UTC. הכפילו שניות ב-1,000 והמירו שוב.
האם Unix timestamps הם שניות או אלפיות שנייה?
בדרך כלל שניות. הרבה Web API ו-Date ב-JavaScript משתמשים באלפיות שנייה. בדקו תמיד מה המערכת מתעדת. חלק מהמערכות משתמשות במיקרו־שניות או ננו־שניות.
איך ממירים שניות לאלפיות שנייה?
מכפילים ב-1,000. 1720000000 שניות הן 1720000000000 אלפיות שנייה. בכיוון ההפוך מחלקים ב-1,000.
למה Date ב-JavaScript משתמש באלפיות שנייה?
חותמת הזמן המספרית של Date ב-JavaScript מוגדרת כאלפיות שנייה מאז Unix epoch. לכן new Date(unixSeconds) שגוי כאשר unixSeconds הוא ערך שניות של Unix.
האם חותמת בת 10 ספרות תמיד שניות?
לא. בתאריכים מודרניים לרוב כן, ו-13 ספרות לרוב אלפיות שנייה. מספר הספרות הוא רמז, לא כלל. אשרו מול תיעוד או תאריך הגיוני.
האם Unix timestamp מכיל אזור זמן?
לא. Unix timestamp הוא רגע שנספר מ-1970-01-01 00:00:00 UTC. אזורי זמן משפיעים על התצוגה, לא על המספר עצמו.