ابزار رایگان · بدون ثبت‌نام

فقط در مرورگر شما؛ چیزی ارسال نمی‌شود

تبدیل Unix Timestamp به تاریخ شمسی و میلادی

عدد timestamp را وارد کنید تا همان لحظه به تاریخ شمسی، وقت تهران، UTC و قالب ISO 8601 تبدیل شود؛ ثانیه، میلی‌ثانیه، میکروثانیه و نانوثانیه خودکار تشخیص داده می‌شوند. در بخش دوم هم از یک تاریخ شمسی یا میلادی، timestamp بسازید.

اکنون (وقت تهران) Unix
واحد عدد

عدد مثبت یا منفی (پیش از ۱۹۷۰)، با ارقام فارسی یا لاتین؛ یا تاریخی مثل ⁦2025-01-01T00:00:00Z⁩. کلید Esc ورودی را پاک می‌کند.

نمونه‌ها

تاریخ به Timestamp

تاریخ شمسی یا میلادی و ساعت را وارد کنید و مشخص کنید ساعت به وقت تهران است یا UTC.

تقویم
ساعت واردشده به

نتیجه

تاریخ معتبری وارد کنید تا timestamp ساخته شود.

راهنمای کامل

راهنمای کامل Unix Timestamp و تبدیل آن به تاریخ شمسی و میلادی

عددی مثل 1735689600 در لاگ سرور، پاسخ API یا ستون پایگاه داده برای انسان معنایی ندارد، ولی برای کامپیوتر دقیق‌ترین شکل ثبت زمان است. این عدد Unix Timestamp است: تعداد ثانیه‌هایی که از نیمه‌شب اول ژانویهٔ ۱۹۷۰ به وقت UTC گذشته است. ابزار تبدیل Unix Timestamp ایران‌کلاد این عدد را به تاریخ و ساعت به وقت تهران، UTC و تقویم شمسی تبدیل می‌کند و در جهت برعکس هم از یک تاریخ، timestamp می‌سازد. در این راهنما با منطق Unix Time، تفاوت ثانیه و میلی‌ثانیه، منطقهٔ زمانی تهران و خطاهای رایج کار با زمان آشنا می‌شوید.

۹ بخش حدود ۹ دقیقه مطالعه

فهرست مطالب

Unix Timestamp چیست و چرا همه‌جا از آن استفاده می‌شود؟

Unix Timestamp یا Epoch Time یک عدد صحیح است که لحظه‌ای مشخص را بدون وابستگی به منطقهٔ زمانی، تقویم یا زبان نشان می‌دهد. نقطهٔ صفر آن، که به آن Unix Epoch می‌گویند، ساعت ۰۰:۰۰:۰۰ روز اول ژانویهٔ ۱۹۷۰ به وقت UTC است و هر ثانیه یک واحد به این عدد اضافه می‌شود. به همین دلیل یک timestamp در تهران، برلین و توکیو دقیقاً یک لحظه را نشان می‌دهد.

سادگی همین عدد دلیل محبوبیت آن است. مقایسهٔ دو زمان فقط یک مقایسهٔ عددی است، محاسبهٔ فاصله یک تفریق ساده است و مرتب‌سازی رکوردها بر اساس زمان سریع انجام می‌شود. سیستم‌عامل‌های لینوکس، زبان‌های برنامه‌نویسی، پایگاه‌های داده، توکن‌های احراز هویت و تقریباً همهٔ سامانه‌های لاگ زمان را در داخل به همین شکل نگه می‌دارند.

نکتهٔ مهم این است که Unix Time ثانیه‌های کبیسه را نادیده می‌گیرد و هر روز را دقیقاً ۸۶۴۰۰ ثانیه حساب می‌کند. برای تقریباً همهٔ کاربردهای وب و سرور این تفاوت اهمیتی ندارد، ولی اگر با اندازه‌گیری‌های علمی دقیق سروکار دارید باید آن را بدانید.

کجا به تبدیل timestamp نیاز پیدا می‌کنید؟

رایج‌ترین موقعیت، خواندن لاگ است. وقتی خطایی در لاگ اپلیکیشن با زمان 1760000000 ثبت شده، باید بدانید آن لحظه به وقت تهران ساعت چند بوده تا با گزارش کاربر یا رخداد دیگری تطبیق دهید. موقعیت دوم، کار با API است: بسیاری از سرویس‌ها زمان ایجاد، انقضا یا آخرین تغییر را به‌صورت عددی برمی‌گردانند.

در توکن‌های JWT هم فیلدهای exp‏، iat و nbf همگی Unix Timestamp به ثانیه‌اند. اگر توکنی زودتر از انتظار منقضی می‌شود، کافی است payload آن را در دیکدر JWT باز کنید و مقدار exp را اینجا تبدیل کنید. در پایگاه داده هم وقتی ستون زمان به شکل عدد ذخیره شده، برای نوشتن کوئری بازهٔ زمانی باید مرز بازه را به timestamp تبدیل کنید.

  • خواندن زمان رخدادها در لاگ سرور و اپلیکیشن
  • بررسی فیلدهای exp و iat در توکن‌های JWT
  • ساختن مرز بازه برای کوئری‌های پایگاه داده
  • تنظیم زمان انقضای کش، لینک دانلود یا کد تأیید
  • دیباگ اختلاف زمان بین دو سرور یا سرور و مرورگر
  • تبدیل زمان خروجی API به تاریخ شمسی برای گزارش

یک مثال واقعی: کاربری گزارش می‌دهد ساعت ده صبح نتوانسته وارد شود، ولی لاگ سرور زمان خطا را به‌صورت عدد و به UTC ثبت کرده است. با تبدیل عدد به وقت تهران معلوم می‌شود خطای ثبت‌شده ساعت ۱۰:۰۲ رخ داده و به همان کاربر مربوط است، نه به خطایی که سه ساعت و نیم قبل‌تر ثبت شده بود.

بازگشت به فهرست مطالب

ابزار تبدیل timestamp ایران‌کلاد چه چیزهایی نشان می‌دهد؟

در کادر اصلی یک عدد وارد می‌کنید و تبدیل همان لحظه انجام می‌شود. بالای نتیجه تاریخ شمسی با نام روز هفته و ساعت به وقت تهران، تاریخ میلادی و فاصلهٔ آن لحظه از اکنون (مثلاً «۳ روز پیش» یا «۲ ساعت دیگر») آمده است. زیر آن هشت قالب آمادهٔ کپی هست: تاریخ شمسی عددی، تاریخ میلادی به وقت تهران همراه اختلاف ساعت، همان لحظه به UTC، قالب ISO 8601 به UTC و با اختلاف تهران، قالب HTTP-date که در هدرهایی مثل Expires و Last-Modified به کار می‌رود، و مقدار به ثانیه و میلی‌ثانیه. کنار هر سطر دکمهٔ کپی قرار دارد. به‌جای عدد می‌توانید تاریخ ISO 8601 دارای منطقهٔ زمانی، مثل خروجی لاگ‌ها و APIها، را هم بچسبانید.

نوار بالای ابزار زمان حال را به تاریخ شمسی و به‌صورت timestamp نشان می‌دهد و هر ثانیه به‌روز می‌شود؛ دکمهٔ «تبدیل لحظهٔ اکنون» همان را در مبدل می‌گذارد. در کارت دوم، «تاریخ به Timestamp»، تاریخ را به تقویم شمسی یا میلادی و ساعت را به وقت تهران یا UTC وارد می‌کنید و timestamp متناظر را به ثانیه، میلی‌ثانیه و ISO 8601 می‌گیرید. نمونه‌های زیر کادر هم با یک کلیک بارگذاری می‌شوند: صفر (آغاز Epoch)، آغاز سال ۲۰۲۵ به ثانیه و میلی‌ثانیه، بزرگ‌ترین مقدار عدد صحیح ۳۲ بیتی علامت‌دار و یک لحظه در تابستان ۱۳۸۷ که ساعت تابستانی داشت.

همهٔ خروجی‌ها با تایپ هر رقم دوباره محاسبه می‌شوند، پس می‌توانید عدد را تکه‌تکه تغییر دهید و اثرش را ببینید؛ مثلاً با افزودن ۸۶۴۰۰ به یک timestamp دقیقاً یک روز جلو می‌روید و با افزودن ۳۶۰۰ یک ساعت. اگر ورودی عدد معتبری نباشد، مثلاً حروف داشته باشد یا تاریخ بدون منطقهٔ زمانی باشد، دلیل دقیق خطا زیر کادر نمایش داده می‌شود و خروجی‌ها پنهان می‌شوند تا نتیجهٔ قبلی را با نتیجهٔ جدید اشتباه نگیرید. عدد واردشده در بخش # آدرس صفحه هم می‌نشیند، پس می‌توانید لینک همان تبدیل را برای همکارتان بفرستید؛ این بخش آدرس به سرور ارسال نمی‌شود.

بازگشت به فهرست مطالب

ثانیه یا میلی‌ثانیه؟ تشخیص خودکار و دام‌های آن

همهٔ سیستم‌ها timestamp را با یک واحد ذخیره نمی‌کنند. PHP و بیشتر ابزارهای لینوکسی ثانیه برمی‌گردانند، ولی JavaScript و Java به‌طور پیش‌فرض میلی‌ثانیه می‌دهند. timestamp به ثانیه امروز ده رقمی و به میلی‌ثانیه سیزده رقمی است. اشتباه گرفتن این دو باعث می‌شود تاریخ هزاران سال جلو برود یا به ژانویهٔ ۱۹۷۰ برگردد.

حالت «خودکار» ابزار واحد را از تعداد رقم‌های بخش صحیح عدد حدس می‌زند: تا ۱۱ رقم ثانیه، ۱۲ تا ۱۴ رقم میلی‌ثانیه، ۱۵ تا ۱۷ رقم میکروثانیه و ۱۸ رقم و بیشتر نانوثانیه. واحد تشخیص‌داده‌شده زیر کادر نوشته می‌شود. این قاعده برای زمان‌های امروزی درست کار می‌کند، ولی میلی‌ثانیه‌های مربوط به پیش از سال ۱۹۷۳ کمتر از ۱۲ رقم دارند و اشتباهاً ثانیه خوانده می‌شوند. اگر چنین عددی دارید، واحد را دستی روی «میلی‌ثانیه» بگذارید.

محیطگرفتن timestamp فعلیواحد
JavaScriptDate.now()میلی‌ثانیه
PHPtime()ثانیه
Pythonint(time.time())ثانیه
Gotime.Now().Unix()ثانیه
Bash (لینوکس)date +%sثانیه
MySQLUNIX_TIMESTAMP()ثانیه
PostgreSQLextract(epoch from now())ثانیه با بخش اعشاری

برخی زبان‌ها میکروثانیه یا نانوثانیه هم می‌دهند (مثل UnixNano در Go یا time.time_ns در Python). ابزار این اعداد را هم می‌پذیرد و عدد ۱۹ رقمی نانوثانیه را بدون گرد شدن می‌خواند، اما تاریخ‌ها با دقت میلی‌ثانیه نمایش داده می‌شوند و اگر بخش کوچک‌تری حذف شود، پیام کوتاهی زیر کادر می‌بینید.

بازگشت به فهرست مطالب

وقت تهران، UTC و تاریخ شمسی: تبدیل منطقهٔ زمانی

timestamp همیشه به UTC اشاره دارد و منطقهٔ زمانی فقط هنگام نمایش وارد بازی می‌شود. وقت رسمی ایران ⁦UTC+03:30⁩ است و از سال ۲۰۲۳ ساعت تابستانی در ایران اجرا نمی‌شود. ابزار برای نمایش وقت تهران از پایگاه دادهٔ مناطق زمانی مرورگر (منطقهٔ Asia/Tehran) استفاده می‌کند؛ پس برای تاریخ‌های قدیمی که ساعت تابستانی داشتند هم ساعت درست نشان داده می‌شود، اختلاف آن روز (مثلاً ⁦+04:30⁩) کنار تاریخ میلادی می‌آید و برچسب «ساعت تابستانی» نمایش داده می‌شود.

تاریخ شمسی با تقویم هجری شمسی خود مرورگر محاسبه می‌شود. همان timestamp را با نام روز هفته، نام ماه شمسی و ارقام فارسی می‌بینید و یک سطر هم به شکل عددی مثل 1404/07/24 برای کپی در صفحه‌گسترده یا گزارش آمده است؛ برای گزارش‌هایی که مخاطب ایرانی دارند نیازی به تبدیل جداگانهٔ میلادی به شمسی نیست.

در جهت برعکس (تاریخ به timestamp)، وقتی «وقت تهران» را انتخاب می‌کنید، ابزار اختلاف واقعی همان روز را به کار می‌برد: امروز ⁦+03:30⁩ و در تابستان سال‌های پیش از ۲۰۲۳ (۱۴۰۲) ⁦+04:30⁩. ساعتی که به خاطر جلو کشیدن ساعت رسمی هرگز وجود نداشته، با پیام خطا رد می‌شود. در کد خودتان هم به‌جای اختلاف ثابت، نام منطقهٔ زمانی Asia/Tehran را به کار ببرید.

بازگشت به فهرست مطالب

مسئلهٔ سال ۲۰۳۸ و محدودهٔ مقادیر قابل تبدیل

سیستم‌هایی که timestamp را در یک عدد صحیح ۳۲ بیتی علامت‌دار نگه می‌دارند، فقط تا مقدار 2147483647 جا دارند که برابر با ساعت ۰۳:۱۴:۰۷ روز نوزدهم ژانویهٔ ۲۰۳۸ به وقت UTC است. یک ثانیه بعد، عدد سرریز می‌کند و منفی می‌شود؛ یعنی تاریخ به سال ۱۹۰۱ برمی‌گردد. این همان «مسئلهٔ سال ۲۰۳۸» است و نمونهٔ مرجع سوم ابزار دقیقاً همین مرز را نشان می‌دهد.

سیستم‌عامل‌ها و زبان‌های امروزی تقریباً همه از عدد ۶۴ بیتی استفاده می‌کنند، ولی ستون‌های قدیمی پایگاه داده، سیستم‌های نهفته و فرمت‌های فایل قدیمی هنوز ممکن است ۳۲ بیتی باشند. برای نمونه، نوع TIMESTAMP در MySQL به همین بازه محدود است و برای تاریخ‌های دورتر باید از DATETIME استفاده کرد. خود ابزار اعداد منفی را هم می‌پذیرد، پس تاریخ‌های پیش از ۱۹۷۰ را هم می‌توانید تبدیل کنید؛ مثلاً -86400 یعنی یک روز پیش از آغاز Epoch.

بازگشت به فهرست مطالب

ذخیرهٔ زمان در پایگاه داده: عدد یا نوع تاریخ؟

یکی از تصمیم‌های رایج طراحی این است که زمان را به‌صورت عدد timestamp ذخیره کنیم یا با نوع تاریخ خود پایگاه داده. عدد صحیح ساده و قابل‌حمل است و بین زبان‌ها بدون ابهام جابه‌جا می‌شود، ولی خواندن مستقیم آن در کوئری سخت است. نوع‌های تاریخ مثل timestamptz در PostgreSQL یا DATETIME در MySQL خواناترند و توابع تاریخ پایگاه داده روی آن‌ها کار می‌کنند.

قاعدهٔ عملی این است: در هر دو حالت زمان را به UTC ذخیره کنید و فقط هنگام نمایش به وقت تهران تبدیل کنید. اگر از PostgreSQL مدیریت‌شده استفاده می‌کنید، timestamptz انتخاب امنی است و اگر MySQL مدیریت‌شده دارید، مراقب محدودیت ۲۰۳۸ در نوع TIMESTAMP باشید. برای کلید اصلی‌ای که خودش ترتیب زمانی دارد، UUID نسخهٔ ۷ هم گزینهٔ جالبی است، چون ۴۸ بیت اول آن timestamp به میلی‌ثانیه است.

بازگشت به فهرست مطالب

حریم خصوصی: تبدیل کجا انجام می‌شود؟

این ابزار کاملاً در مرورگر شما اجرا می‌شود. سرور ایران‌کلاد فقط صفحه را تحویل می‌دهد و تبدیل‌ها با توابع تاریخ و قالب‌بندی بومی مرورگر انجام می‌شوند؛ کد ابزار هیچ درخواستی برای ارسال عدد یا تاریخ واردشده به سرور نمی‌فرستد. «زمان حال» هم از ساعت دستگاه خودتان خوانده می‌شود، نه از سرور.

همین نکته یک پیامد عملی دارد: اگر ساعت دستگاه شما تنظیم نباشد، «زمان حال» و ستون «فاصله از حال» هم به همان اندازه خطا دارند. خود تبدیل timestamp به تاریخ به ساعت دستگاه وابسته نیست و همیشه دقیق است. روی سرورها هم همین اصل برقرار است: سروری که ساعتش با NTP همگام نشده، timestamp‌های نادرست در لاگ ثبت می‌کند و تطبیق رخدادها بین چند سرور را سخت می‌کند. روی سرور لینوکسی با دستور timedatectl می‌توانید ببینید همگام‌سازی ساعت فعال است یا نه و منطقهٔ زمانی سرور چیست؛ این یکی از اولین بررسی‌ها پس از راه‌اندازی هر سرور تازه است.

بازگشت به فهرست مطالب

نکته‌های عملی و ابزارهای مرتبط

برای دیباگ سریع لاگ، timestamp مشکوک را اینجا بچسبانید و به وقت تهران ببینید، بعد با لاگ‌های دیگر مقایسه کنید. اگر زمان‌بندی اجرای اسکریپتی را تنظیم می‌کنید، عبارت زمان‌بندی را در ترجمهٔ Cron بررسی کنید و به خاطر داشته باشید cron با ساعت محلی خود سرور کار می‌کند، نه UTC، مگر اینکه منطقهٔ زمانی سرور UTC باشد.

برای پیدا کردن همهٔ timestamp‌ها در یک متن طولانی، الگوی ساده‌ای مثل یک عدد ده‌رقمی را در تست Regex امتحان کنید و برای مرتب کردن پاسخ API که زمان‌ها را در خود دارد، از فرمت‌کنندهٔ JSON کمک بگیرید. اگر اپلیکیشن خود را روی سرور ابری اجرا می‌کنید، منطقهٔ زمانی سرور را آگاهانه انتخاب کنید و در مستندات تیم ثبت کنید. فهرست همهٔ ابزارها در صفحهٔ ابزارها است.

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۰ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

Unix Timestamp دقیقاً از چه زمانی شمرده می‌شود؟
از ساعت ۰۰:۰۰:۰۰ روز اول ژانویهٔ ۱۹۷۰ به وقت UTC. مقدار صفر همان لحظه است و هر ثانیه یک واحد به آن اضافه می‌شود.
از کجا بفهمم عدد من ثانیه است یا میلی‌ثانیه؟
برای زمان‌های امروزی، timestamp به ثانیه ده رقم و به میلی‌ثانیه سیزده رقم دارد. حالت خودکار ابزار تا ۱۱ رقم را ثانیه، ۱۲ تا ۱۴ رقم را میلی‌ثانیه و بیشتر از آن را میکرو یا نانوثانیه می‌گیرد؛ برای میلی‌ثانیه‌های پیش از سال ۱۹۷۳ واحد را دستی انتخاب کنید.
آیا ابزار تاریخ شمسی هم نشان می‌دهد؟
بله. بالای نتیجه همان لحظه به تقویم هجری شمسی، با نام روز هفته، نام ماه و ارقام فارسی و به وقت تهران نمایش داده می‌شود و سطر «شمسی (عددی)» هم شکل قابل کپی آن است. در کارت «تاریخ به Timestamp» می‌توانید از تاریخ شمسی هم timestamp بسازید.
وقت تهران چند ساعت با UTC فاصله دارد؟
سه ساعت و نیم (⁦UTC+03:30⁩). از سال ۲۰۲۳ ساعت تابستانی در ایران اجرا نمی‌شود، پس این اختلاف در تمام سال ثابت است.
چرا تبدیل تاریخ تابستانی قدیمی به timestamp یک ساعت اختلاف دارد؟
اگر در کد خودتان اختلاف ثابت ⁦+03:30⁩ را به کار ببرید، برای تابستان سال‌های پیش از ۲۰۲۳ یک ساعت خطا می‌گیرید، چون ایران آن زمان در تابستان ⁦+04:30⁩ بود. این ابزار با منطقهٔ Asia/Tehran کار می‌کند و اختلاف واقعی همان روز را به کار می‌برد؛ در کد هم نام منطقه را به‌جای اختلاف ثابت بنویسید.
آیا می‌توانم تاریخ‌های پیش از ۱۹۷۰ را تبدیل کنم؟
بله. عدد منفی را وارد کنید؛ هر ۸۶۴۰۰ ثانیه یک روز است، پس -86400 یعنی ۳۱ دسامبر ۱۹۶۹ به وقت UTC. در کارت «تاریخ به Timestamp» هم می‌توانید تاریخ‌های قدیمی شمسی یا میلادی را وارد کنید.
مسئلهٔ سال ۲۰۳۸ چیست؟
سیستم‌هایی که timestamp را در عدد صحیح ۳۲ بیتی علامت‌دار نگه می‌دارند، بعد از 2147483647 یعنی ۱۹ ژانویهٔ ۲۰۳۸ سرریز می‌کنند. سیستم‌های ۶۴ بیتی این مشکل را ندارند، ولی ستون‌ها و فرمت‌های قدیمی هنوز ممکن است ۳۲ بیتی باشند.
آیا عددی که وارد می‌کنم به سرور ارسال می‌شود؟
خیر. تبدیل کاملاً در مرورگر انجام می‌شود و کد ابزار هیچ داده‌ای به سرور نمی‌فرستد. عدد در بخش # آدرس صفحه می‌نشیند تا بتوانید لینک را به اشتراک بگذارید، و این بخش هرگز به سرور ارسال نمی‌شود. زمان حال هم از ساعت دستگاه خودتان خوانده می‌شود.
چرا «فاصله از حال» درست نیست؟
این ستون با ساعت دستگاه شما مقایسه می‌شود. اگر ساعت سیستم تنظیم نباشد، فاصله هم به همان اندازه خطا دارد؛ خود تبدیل timestamp به تاریخ دقیق است.
ISO 8601 چه قالبی است و چرا Z در انتهای آن آمده؟
ISO 8601 قالب استاندارد بین‌المللی تاریخ و ساعت است، مثل ⁦2026-01-01T00:00:00.000Z⁩. حرف Z یعنی زمان به UTC است. این قالب برای تبادل داده بین سیستم‌ها و API‌ها توصیه می‌شود.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

سرور ابری

سرور ابری ایران‌کلاد در کمتر از ۶۰ ثانیه آماده می‌شود؛ با دیسک NVMe SSD، پورت اختصاصی ۱۰ گیگابیت و صورت‌حساب ساعتی تومانی، از ۱٬۱۰۰ تومان در ساعت.