Daripada mengutak-atik zona waktu, mengapa tidak melakukannya saja
ALTER TABLE `your_table`
CHANGE `date_added` `date_added`
TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
Ini akan berubah kolom Anda dari kolom DATE ke kolom TIMESTAMP , mengonversi semua tanggal ke stempel waktu UTC masing-masing dalam proses.
Saat baris baru dimasukkan, itu akan menggunakan stempel waktu saat ini sebagai nilai . Stempel waktu selalu dalam UTC, jadi Anda tidak perlu mengubah zona waktu di server MySql Anda, atau memberikan tanggal saat memasukkan baris baru.
Jika Anda tidak dapat atau tidak ingin mengubah kolom, Anda juga dapat memilih stempel waktu melalui
SELECT UNIX_TIMESTAMP('date_added') FROM your_table;
Untuk TimeAgo Anda, Anda bisa melakukannya
$now = new DateTime;
$dateAdded = new DateTime("@$yourTimestampFromDb");
$dateAdded->setTimezone($now->getTimezone());
$timeSinceAdded = $dateAdded->diff($now);
Saat Anda memberikan stempel waktu ke DateTime, itu akan selalu menggunakan UTC terlepas dari pengaturan zona waktu server default Anda. Akibatnya, Anda harus mengonversi $dateAdded
ke zona waktu default (seperti yang ditunjukkan di atas) atau konversi $timeSinceAdded
ke UTC.
Untuk mengubah dateTime ke zona waktu pengguna yang sedang mengunjungi, Anda dapat
- harus memiliki informasi ini di database Anda, mis. karena Anda meminta pengguna terdaftar untuk memberikan informasi ini
- atau Anda menentukannya saat runtime, biasanya dengan melakukan pencarian GeoIP di IP pengguna yang mengunjungi atau dengan mengirimkan DateTime Offset dari browser pengguna.
Bagaimanapun, Anda kemudian hanya mengubah kedua DateTimes ke zona waktu itu. Ini mudah dilakukan melalui setTimezone()
.
$timeSinceAdded
kemudian akan menjadi DateInterval
objek, yang dapat Anda gunakan seperti ini
echo $timeSinceAdded->format('%a total days');
Silakan merujuk ke tautan untuk detail lebih lanjut, misalnya tentang pengubah format yang tersedia.