UTC kullanmadan saat dilimleri gösteriliyor

1 Cevap php

Ben her sabah bunu nasıl okuma oldum ve genel fikir şudur: UTC sizin damgaları depolamak ve oradan mahsup hesaplar.

Ancak, çoğu insan gibi, ben varolan bir kod temeli muhafaza ediyorum ve bizim tarihleri ​​depolamak şekilde değiştiremezsiniz. En azından değil, ayrılan süre içinde.

Yani benim soru güvenle böyle bir şey yapabilirler mi?

// this is my time zone
$timestamp = strtotime($timestampFromDatabase);
date_default_timezone_set('America/New York');
$tz = date_default_timezone_get();

// this is theoretically their timezone, which will eventually
// be taken from a session variable
date_default_timezone_set('Europe/Paris');
$offset = time() - $timestamp;
$timestamp -= $offset;

// now that I have the offset, display dates like this
date('r', $timestamp);

Bazı insanlar tarih aritmetiği yaparken karşı tavsiye, ama burada yanlış yapıyorum ne var? Daha iyi bir yolu var mı? Ben için dikkat etmeniz gereken tuzaklar var mı? Ben bu yöntemi üretmek olabilir hataların ne tür özellikle ilgileniyorum, ve varsa, onlar kim etkileyecek?

Patronum hata yalnızca kullanıcı tabanı% 1'ini etkileyen umurumda değil adam türüdür.

Düzenleme: Ben bu herhangi bir net yapabilir miyim? Ben bu konuda çok fazla tutanlar var görünmemektedir. Herkes? Hatta belirsiz bir öneri ya da bir bağlantı son derece yararlı olacaktır.

1 Cevap

Kısa cevap dilimleri ile çalışmak zor ve kimse zor soruları çözmek istiyor olmasıdır!

Uzun, cevap şudur:

Öncelikle, mevcut saat dilimleri, tarihinizden bir gösterimini oluşturmak gerekir. Aşağıdaki eşdeğerdir:

date_default_timezone_set('America/New York');

$date = new DateTime(null);

VEYA

$date = new DateTime(null, new DateTimeZone('America/New York'));

Bu size Amerika / New York bölge seti ile bir tarih verir. Biz kolayca sonraki satırda bu durumda Europe / Paris de, kullanıcı timezone dönüştürebilirsiniz:

$date->setTimezone(new DateTimeZone('Europe/London'));

Siz herhangi bir noktada temsil tarih / saati almak için aşağıdaki satırı kullanabilirsiniz.

echo $date->format('d/m/Y H:i:s');

I strongly PHP fonksiyonları inşa siz sağ olarak almazsınız karmaşık şeylerden kez ışığından ve daha bilgisine sahip, aritmetik üzerinde tavsiye.


Tam benim test komut:

date_default_timezone_set('America/Belize');

$date = new DateTime(null);

echo $date->format('d/m/Y H:i:s') . '<br>';

$date->setTimezone(new DateTimeZone('Europe/London'));

echo $date->format('d/m/Y H:i:s') . '<br>';