یکی از مشکلات بزرگ در کدنویسی به زبان PHP، درج زمان کنونی در دیتابیس MySQL است. اگر شما در دیتابیس فیلدی داشته باشید که بخواهید در آن زمان درج رکورد را ثبت کنید، دو راه پیش رو دارید:
۱- نوع فیلد را timestamp قرار دهید و سپس defualt value مربوط به آن را روی CURRENT_TIMESTAMP تنظیم کنید.
مشکل این روش: این روش متأسفانه timezone مربوط به سرور را ملاک قرار میدهد و زمان را مثلاً به ساعت تهران در دیتابیس درج میکند. در حالی که ما در برنامهنویسی باید حتماً تمام زمانها را بر مبنای لندن (یعنی UTC) درج کنیم.
۲- نوع فیلد را datetime قرار دهید وهنگام درج در دیتابیس به جای مقدار این فیلد از تابع NOW() استفاده کنید.
مشکل این روش: این روش نیز متأسفانه همان مشکل بالا را دارد و زمان را بر اساس UTC درج نمیکند.
شما نوع فیلد را روی datetime یا همان timestamp قرار دهید و حتی اگر خواستید همان CURRENT_TIMESTAMP را هم به عنوان مقدار پیشفرض انتخاب کنید، اما در PHP هنگام درج در دیتابیس، خودتان لحظه فعلی را به UTC بهدست آورید و به جای NOW از آن استفاده کنید.
به مثال زیر دقت کنید:
به متغیر now و نحوهی استفاده از آن هنگام درج دقت کنید...
با این روش، قطعاً مطمئن هستید که زمان فعلی به UTC در دیتابیس درج میشود. (تابع gmdate زمان را به GMT برمیگرداند و شما آنرا در دیتابیس درج میکنید)
موفق باشید؛
حمید رضا نیرومند