مهر زمانی یونیک عددی است نمایش دهنده اختلاف از ساعت 00:00:00 UTC روز 1 ژانویه 1970 میلادی بر حسب ثانیه که استفاده فراوانی از آن برای ذخیره زمان در سیستم های مختلف می شود. در این نوشته کوتاه زیر سعی داریم نحوه استفاده از این سیستم را در MySQL و چگونگی کار با آن ، تبدیل آن به فرم قابل نمایش و .. را ببرسی کنیم. برای شروع جدول نمونه ای را بصورت زیر ایجاد می کنیم. تمامی کوئری های این نوشته بروی جدول زیر اجرا می شوند. ```

-- Table "mytable" DDL
CREATE TABLE mytable (
userId int(11) NOT NULL,
url varchar(100) NOT NULL,
epoch int(11) NOT NULL
);
INSERT INTO mytable VALUES(1,'homepage',1225540800);

User 1 visited the url homepage on Nov 1, 2008

INSERT INTO mytable VALUES(2,'contact',1225886400);

User 2 visited the url contact on Nov 5, 2008

INSERT INTO mytable VALUES(3,'contact',1225972800);

User 3 visited the url contact on Nov 6, 2008

INSERT INTO mytable VALUES(4,'homepage',1228132800);

User 4 visited the url homepage on Dec 1, 2008

محتوات جدول ایجادی:

+--------+----------+------------+
| userId | url | epoch |
+--------+----------+------------+
| 1 | homepage | 1225540800 |
| 2 | contact | 1225886400 |
| 3 | contact | 1225972800 |
| 4 | homepage | 1228132800 |
+--------+----------+------------+

<h4>تبدیل به فرمت زمانی معمول</h4>

SELECT userId, url, FROM_UNIXTIME(epoch) FROM mytable

نتیجه اجرای این کوئری:

+--------+----------+----------------------+
| userId | url | FROM_UNIXTIME(epoch) |
+--------+----------+----------------------+
| 1 | homepage | 2008-11-01 15:30:00 |
| 2 | contact | 2008-11-05 15:30:00 |
| 3 | contact | 2008-11-06 15:30:00 |
| 4 | homepage | 2008-12-01 15:30:00 |
+--------+----------+----------------------+

همچنین می توانید مهر زمانی را به فرمت دخواه خود تبدیل کنید. برای این کار می بایست فرمت مورد نظر خود را بعنوان پارامتر دوم به تابع `FROM_UNIXTIME` ارسال کنیم.

SELECT userId, url, FROM_UNIXTIME(epoch,"%Y-%m-%d") FROM mytable

نتیجه اجرای کوئری فوق:

+--------+----------+---------------------------------+
| userId | url | FROM_UNIXTIME(epoch,"%Y-%m-%d") |
+--------+----------+---------------------------------+
| 1 | homepage | 2008-11-01 |
| 2 | contact | 2008-11-05 |
| 3 | contact | 2008-11-06 |
| 4 | homepage | 2008-12-01 |
+--------+----------+---------------------------------+

<h4>گروه بندی برحسب تاریخ</h4>
فرض کنید می خواهیم آمار ماهیانه ای از تعداد افراد بازدید کننده ارائه دهیم، برای این کار می توانیم کوئری را بر حسب تاریخ گروه بندی کردن و نتیحه را نمایش دهیم.

SELECT DISTINCT FROM_UNIXTIME(epoch,"%M, %Y") AS month, count(*) as numberOfVisits
FROM mytable
GROUP BY month
ORDER BY epoch

نتیجه کوئری:

+----------------+----------------+
| month | numberOfVisits |
+----------------+----------------+
| November, 2008 | 3 |
| December, 2008 | 1 |
+----------------+----------------+

براحتی می توان کوئری فوق را بصورت آمار ساعتی، روزانه، هفتگی، سالیانه و .. در آورد. در زیر تبدیل کوئری فوق بصورت سالیانه را مشاهده می کنید.

SELECT DISTINCT FROM_UNIXTIME(epoch,"%Y") AS year, count(*) as numberOfVisits
FROM mytable
GROUP BY year
ORDER BY epoch

<h4>افزودن سطری جدید به جدول</h4>
با استفاده از تابع `UNIX_TIMESTAMP()` می توانیم براحتی تاریخ با فرمت تاریخی پیش فرض مای اس کیو ال را به مهر زمانی یونیکس تبدیل کنیم.
همچنین تابع `now()` تاریخ کنونی سیستم را بفرمت پیش فرض بر می گرداند.

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP(now()))

یا می توانید خود تاریخی دلخواه را به تابع `UNIX_TIMESTAMP()` بفرستیم.

INSERT INTO mytable VALUES(1,'pagename',UNIX_TIMESTAMP('2008-12-01 12:00:00'))

<h3>مشخصه های فرمت بندی تاریخ در MySQL</h3>
<div class="geshifilter">
<table style="direction:ltr;font-family:monospace;font-size:13px;"  cellpadding="2">
<tbody><tr><td><b>Specifier</b></td><td><b>   Description</b></td></tr>
<tr><td>%a </td><td>Abbreviated weekday name (Sun..Sat)</td></tr>
<tr><td>%b </td><td>Abbreviated month name (Jan..Dec)</td></tr>
<tr><td>%c </td><td>Month, numeric (0..12)</td></tr>
<tr><td>%D </td><td>Day of the month with English suffix (0th, 1st, 2nd, 3rd, ...)</td></tr>
<tr><td>%d </td><td>   Day of the month, numeric (00..31)</td></tr>
<tr><td>%e </td><td>   Day of the month, numeric (0..31)</td></tr>
<tr><td>%f </td><td>   Microseconds (000000..999999)</td></tr>
<tr><td>%H </td><td>Hour (00..23)</td></tr>
<tr><td>%h </td><td>   Hour (01..12)</td></tr>
<tr><td>%I </td><td>   Hour (01..12)</td></tr>
<tr><td>%i </td><td>   Minutes, numeric (00..59)</td></tr>
<tr><td>%j </td><td>   Day of year (001..366)</td></tr>
<tr><td>%k </td><td>   Hour (0..23)</td></tr>
<tr><td>%l </td><td>   Hour (1..12)</td></tr>
<tr><td>%M </td><td>Month name (January..December)</td></tr>
<tr><td>%m </td><td>Month, numeric (00..12)</td></tr>
<tr><td>%p </td><td>   AM or PM</td></tr>
<tr><td>%r </td><td>   Time, 12-hour (hh:mm:ss followed by AM or PM)</td></tr>
<tr><td>%S </td><td>   Seconds (00..59)</td></tr>
<tr><td>%s </td><td>   Seconds (00..59)</td></tr>
<tr><td>%T </td><td>   Time, 24-hour (hh:mm:ss)</td></tr>
<tr><td>%U </td><td>Week (00..53), where Sunday is the first day of the week</td></tr>
<tr><td>%u </td><td>   Week (00..53), where Monday is the first day of the week</td></tr>
<tr><td>%V </td><td>Week (01..53), where Sunday is the first day of the week; used with %X</td></tr>
<tr><td>%v </td><td>Week (01..53), where Monday is the first day of the week; used with %x</td></tr>
<tr><td>%W </td><td>Weekday name (Sunday..Saturday)</td></tr>
<tr><td>%w </td><td>Day of the week (0=Sunday..6=Saturday)</td></tr>
<tr><td>%X </td><td>Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V</td></tr>
<tr><td>%x </td><td>   Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v</td></tr>
<tr><td>%Y </td><td>Year, numeric, four digits</td></tr>
<tr><td>%y </td><td>Year, numeric (two digits)</td></tr>
<tr><td>%%</td><td>A literal '%' character</td></tr>
</tbody></table></div>