راهنمای فنی
Unix Timestamp: ثانیه در برابر میلیثانیه — چرا تاریخ ۱۹۷۰ میشود
اگر Unix timestamp به تاریخی نزدیک ۱۹۷۰ تبدیل شود، اغلب ثانیه را میلیثانیه خواندهاند. ببینید واحدها را چطور تشخیص دهید.
اگر Unix timestamp تاریخی نزدیک ۱۹۷۰ بدهد، مقدار اغلب با واحد اشتباه تفسیر میشود.
Unix timestamp معمولاً ثانیه است؛ مقدار Date در JavaScript معمولاً میلیثانیه.
timestamp مدرن ۱۰ رقمی اغلب ثانیه است و ۱۳ رقمی اغلب میلیثانیه. اگر واحدها جور نباشند، شاید باید در ۱۰۰۰ ضرب یا تقسیم کنید.
timestamp را به تاریخ تبدیل کردید و به ژانویهٔ ۱۹۷۰ رسیدید. بهندرت ساعت خراب است. عدد بهصورت میلیثانیه خوانده شد در حالی که ثانیه ذخیره شده بود—یا برعکس.
Unix timestamp چیست؟
Unix timestamp زمان را از Unix epoch میسنجد: 1970-01-01 00:00:00 UTC. معمولاً ثانیهٔ کامل است. همان لحظه را میتوان میلیثانیه هم ذخیره کرد (ثانیه × ۱۰۰۰). خود عدد واحد را نمیگوید.
ثانیه در برابر میلیثانیه: اختلاف ×۱۰۰۰
یک ثانیه برابر ۱۰۰۰ میلیثانیه است. 1720000000 را با 1720000000000 مقایسه کنید. اگر اولی ثانیه و دومی میلیثانیه باشد، یک لحظهاند. اولی را میلیثانیه بخوانید، تاریخ به سمت ۱۹۷۰ میپرد.
این نتایج UTC از اعداد بالا محاسبه شدهاند، حدس نیستند.
| مقدار | واحد محتمل | تفسیر (UTC) |
|---|---|---|
| 1720000000 | ثانیه | تاریخ مدرن اگر ثانیه خوانده شود: 2024-07-03 09:46:40 UTC |
| 1720000000000 | میلیثانیه | همان لحظه اگر میلیثانیه خوانده شود: 2024-07-03 09:46:40 UTC |
| 1720000000 بهعنوان میلیثانیه | واحد نادرست | تاریخ نزدیک ۱۹۷۰: 1970-01-20 21:46:40 UTC |
چرا timestamp من ۱۹۷۰ نشان میدهد؟
اگر مقدار ثانیه را میلیثانیه بگیرند، عدد ۱۰۰۰ برابر کوچکتر از حد لازم است. JavaScript فقط بازهٔ کوتاهی بعد از Unix epoch میشمارد و تاریخ در ۱۹۷۰ میماند:
const seconds = 1720000000;
new Date(seconds);
// 1970-01-20 21:46:40 UTC
new Date(seconds * 1000);
// 2024-07-03 09:46:40 UTC
آن تاریخ ۱۹۷۰ همان epoch بهعلاوهٔ حدود دو هفته است. ثانیهها را قبل از دادن به Date در ۱۰۰۰ ضرب کنید.
- ثانیه
- 1720000000
- میلیثانیه
- 1720000000000
- مقدار ثانیه
- اشتباهی میلیثانیه گرفته شد
- تاریخ نزدیک ۱۹۷۰
اگر نتیجه نزدیک ۱۹۷۰ است، واحد timestamp را قبل از بررسی منطقهٔ زمانی چک کنید.
آیا ۱۰ رقم ثانیه است و ۱۳ رقم میلیثانیه؟
برای تاریخهای امروزی، ۱۰ رقم اغلب ثانیه و ۱۳ رقم اغلب میلیثانیه است. این نشانهٔ سریع است، نه قاعدهٔ اعتبارسنجی. تعداد رقم با بازهٔ زمانی عوض میشود و بعضی APIها میکروثانیه یا نانوثانیه ذخیره میکنند. واحد را با مستندات یا تاریخی که معنا دارد تأیید کنید.
چرا این در JavaScript اینقدر رایج است
در JavaScript مقدار عددی Date میلیثانیه از epoch است. بسیاری از بکاندها، پایگاهها و ابزارهای Unix هنوز ثانیه ذخیره میکنند. دادن مستقیم ثانیه به Date خطای رایجی است:
const unixSeconds = 1720000000;
const wrong = new Date(unixSeconds);
const correct = new Date(unixSeconds * 1000);
wrong نزدیک ۱۹۷۰ است (1970-01-20 21:46:40 UTC). correct لحظهٔ مدرن است (2024-07-03 09:46:40 UTC).
سامانههای دیگر واحدهای دیگری دارند
زبانها، APIها و پایگاههای دیگر ممکن است ثانیه یا میلیثانیه به کار ببرند. بعضی میکروثانیه یا نانوثانیه ذخیره میکنند. فرض نکنید یک زبان همیشه یک واحد دارد—مستندات را ببینید. اگر عدد در JSON باشد، قالببندی و مقایسه JSON فیلد را خوانا میکند؛ باز هم واحد را نمیگوید.
چطور بفهمم timestamp من کدام واحد است؟
این بررسیها را به ترتیب انجام دهید. تعداد رقم بهتنهایی کافی نیست.
- مستندات API یا پایگاه داده را ببینید.
- به تعداد تقریبی رقم نگاه کنید.
- مقدار را با یک timestamp مدرن باورپذیر مقایسه کنید.
- مقدار را هم بهصورت ثانیه و هم میلیثانیه بیازمایید.
- ببینید تاریخ حاصل معنا دارد یا نه.
اگر یک تفسیر به ۱۹۷۰ برسد و دیگری به تاریخی که میشناسید، علت ناهمخوانی واحد است.
اشتباههای رایج Unix timestamp
- ثانیه بهعنوان میلیثانیه خوانده شود. تاریخ به سمت ۱۹۷۰ جمع میشود، مثل مثال بالا.
- میلیثانیه بهعنوان ثانیه خوانده شود. تاریخ به آیندهٔ دور میپرد، یا تبدیل شکست میخورد.
- دو بار ضرب در ۱۰۰۰. مقداری که از قبل میلیثانیه بود خیلی بزرگ میشود و تاریخ قرنها جلو میرود.
- دو بار تقسیم بر ۱۰۰۰. مقدار ثانیه دوباره کوچک میشود و باز نزدیک ۱۹۷۰ میماند.
- سرزنش منطقهٔ زمانی. منطقه میتواند ساعت یا روز تقویم را جابهجا کند. timestamp مدرن را به ۱۹۷۰ نمیبرد.
- رشتهٔ تاریخ قالببندیشده را Unix timestamp گرفتن. مقداری مثل 2024-07-03T09:46:40Z عدد epoch نیست. آن را بهعنوان تاریخ تجزیه کنید، نه ثانیه.
آیا منطقهٔ زمانی باعث مشکل ۱۹۷۰ میشود؟
معمولاً نه. منطقهٔ زمانی میتواند ساعت نمایشدادهشده و نزدیک نیمهشب روز تقویم را عوض کند. Unix timestamp مدرن را به ۱۹۷۰ تبدیل نمیکند. اگر نتیجه ۱۹۷۰ است، اول ثانیه در برابر میلیثانیه را بررسی کنید.
تبدیل و بررسی Unix timestamp
NEXNARA مبدل تاریخ و زمان میتواند Unix timestamp را در مرورگر تبدیل کند.
ثانیه یا میلیثانیهٔ Unix را بچسبانید، timestamp فعلی را بگیرید، UTC و ساعت محلی را ببینید، منطقهٔ زمانی را تبدیل کنید و تاریخ را قالب بزنید. تشخیص خودکار اغلب ۱۰ رقم را ثانیه و ۱۳ رقم را میلیثانیه میگیرد؛ واحد را همچنان میتوانید خودتان انتخاب کنید.
خود تبدیل در مرورگر شما انجام میشود. این ابزار تاریخ یا timestamp را به سرور NEXNARA نمیفرستد. تبلیغات و امکانات دیگر سایت همچنان از شبکه استفاده میکنند؛ آن جدا از تبدیل است.
میخواهید Unix timestamp را بررسی کنید؟ مبدل تاریخ و زمان را باز کنید و ثانیه را با میلیثانیه مقایسه کنید.
FAQ
چرا Unix timestamp من ۱۹۷۰ نشان میدهد؟
اغلب ثانیهای است که میلیثانیه خوانده شده. JavaScript عدد خیلی کوچکتری را پردازش میکند، پس تاریخ کمی بعد از 1970-01-01 00:00:00 UTC میافتد. ثانیهها را در ۱۰۰۰ ضرب کنید و دوباره تبدیل کنید.
Unix timestamp ثانیه است یا میلیثانیه؟
معمولاً ثانیه. بسیاری از APIهای وب و Date در JavaScript میلیثانیهاند. همیشه ببینید آن سامانه چه مستند کرده. بعضی سامانه میکروثانیه یا نانوثانیه دارند.
چطور ثانیه را به میلیثانیه تبدیل کنم؟
در ۱۰۰۰ ضرب کنید. 1720000000 ثانیه برابر 1720000000000 میلیثانیه است. برعکس، بر ۱۰۰۰ تقسیم کنید.
چرا Date در JavaScript میلیثانیه است؟
timestamp عددی Date در JavaScript بهصورت میلیثانیه از Unix epoch تعریف شده. برای همین new Date(unixSeconds) غلط است وقتی unixSeconds ثانیهٔ Unix باشد.
آیا timestamp دهرقمی همیشه ثانیه است؟
نه. برای تاریخهای امروزی اغلب ثانیه است و ۱۳ رقم اغلب میلیثانیه. تعداد رقم نشانه است، نه قاعده. با مستندات یا تاریخی که معنا دارد تأیید کنید.
آیا Unix timestamp منطقهٔ زمانی دارد؟
نه. Unix timestamp لحظهای است که از 1970-01-01 00:00:00 UTC شمرده میشود. مناطق زمانی نمایش را عوض میکنند، نه خود عدد را.