Herkes php farklı saat dilimleri için tarih ve saati dönüştürmek için kolay bir yöntem önerebilirsiniz?
Bunun için datetime nesnesi ya da fonksiyon takma kullanabilirsiniz:
Example (abridged from PHP Manual) a>
date_default_timezone_set('Europe/London');
$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->format('Y-m-d H:i:s') . "\n";
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->format('Y-m-d H:i:s');
Edit regarding comments
i farklı konumlardan kullanıcı girişi gibi farklı zaman dilimleri içinde tarihi göstermek gerekir, çünkü ancak ben bu yöntemi kullanmak cannt
Bu bir sorun değil. Bir kullanıcı oturum açtığında, onun dilimini belirlemek ve sadece gösterilen Seviyorum DateTime nesnesine ayarlayın. Benim projelerinden biri benzer bir yaklaşım kullanıyorum ve bir cazibe gibi çalışır.
veritabanında i tek bir zaman diliminde tarihleri almak gerekir, o zaman sadece düzgün işlenebilir
Ya tek bir zaman diliminde olan bir zaman damgası veya bir datetime olarak zaman saklayın. Eğer bir DateTime alanı sorgulamak zaman, bu zaman dilimi için bir DateTime nesne zaman dönüştürmek ya da - db destekliyorsa - Seçilen timezone ile sorgu.
Daha basit bir yöntem bu gibi görünüyor:
date_default_timezone_set('Europe/London'); // your user's timezone
$my_datetime='2013-10-23 15:47:10';
echo date('Y-m-d H:i:s',strtotime("$my_datetime UTC"));
Açıklandığı gibi in the PHP manual, strtotime () de bir zaman dilimini kabul, sadece datetime onu eklemek zorunda.
Bu şekilde gün ışığı tasarruf ile sorun olmayacak çünkü ben UTC tüm tarihsaat saklamanızı öneririz.
https://github.com/barbushin/dater - farklı saat dilimleri ve formatlarda datetime ile çalışmak için büyük bir PHP kütüphanesi de bulunmaktadır
Bu benim için çalıştı ve çok güzel temiz!
function convert_to_user_date($date, $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC', $format = 'n/j/Y g:i A')
{
$dateTime = new DateTime ($date, new DateTimeZone($serverTimeZone));
$dateTime->setTimezone(new DateTimeZone($userTimeZone));
return $dateTime->format($format);
}
function convert_to_server_date($date, $userTimeZone = 'America/Los_Angeles', $serverTimeZone = 'UTC', $format = 'n/j/Y g:i A')
{
$dateTime = new DateTime ($date, new DateTimeZone($userTimeZone));
$dateTime->setTimezone(new DateTimeZone($serverTimeZone));
return $dateTime->format($format);
}