PHP / MySQL Dilimi açıklama

2 Cevap php

Şu anda kullanıcının ayarlarına bağlı olarak, belirli bir zaman dilimi benim MySQL zaman dönüştürme kavramı etrafında beynimi saran bir sorunu yaşıyorum.

Benim MySQL kez tüm aşağıdaki biçimde, UTC zaman içinde saklanır:

2009-11-08 17:06:40

Ben zaman sorgulamak kez, ben PHP kullanarak uygun timezone dönüştürmek için nasıl emin değilim.

Böylece, yukarıdaki örnekte, ben göstermek istiyorum:

2009-11-08 09:06:40

İşte ben şu anda (muhtemelen sabit olması için ihtiyacı olan) ne var:

$sql = 'SELECT date FROM mytable';
	require("connection.php");
	$result = mysql_db_query($DBname,$sql,$link); 
	while($row = mysql_fetch_assoc($result)) { 

	$dt_obj = new DateTime($row['date']); 
	$dt_obj->setTimezone(new DateTimeZone('PST')); 
	echo $dt_obj; 		
	echo "<br>";
	 }

Öncelikle, ben aşağıdaki hatayı alıyorum:

Catchable fatal error: Object of class DateTime could not be converted to string

İkincisi, ben (bu durumda, PST olarak) zaten doğru zaman diliminde saati görüntülemek için düzgün kuruyorum Whethere olarak karıştı.

Bu yapmak konusunda herhangi bir öneriniz büyük mutluluk duyacağız. Teşekkürler!

UPDATE:

Ben GZipp tavsiye aldı ve gibi bakmak kod güncellenmiştir:

$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo $dt_obj->format('Y-m-d H:i:s');

Ancak, bu gibi (yukarıdaki örneği kullanarak) zaman zaman sergiliyor:

2009-11-08 15:06:40

Herhangi bir fikir ne bu neden olur?

2 Cevap

Ben bu ne peşinde olduğunu düşünüyorum;

$dt_obj = new DateTime($row['date']); 
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo $dt_obj->format('Y-m-d H:i:s');

List of Supported Timezones kullanın.

Böyle bir şey yapmak, PHP UTC zamanı olarak veritabanından zaman görür emin olmak için: Güncelleme düzenlenmiş soru:

$row['time'] = '2009-11-08 09:06:40';

$dt_obj = new DateTime($row['time'], new DateTimeZone('UTC')); 
echo 'UTC: ' . $dt_obj->format('Y-m-d H:i:s') . '<br />';  // UTC: 2009-11-08 09:06:40
$dt_obj->setTimezone(new DateTimeZone('America/Los_Angeles')); 
echo 'Los Angeles: ' . $dt_obj->format('Y-m-d H:i:s');  // Los Angeles: 2009-11-08 01:06:40

Ben yanlış olabilir, ancak sizin echo $dt_obj; deyimi şikayet ediyor gibi görünüyor. Sen DateTime sonucunu :: format () yankılanan deneyebilirsiniz;

EDIT: Yeni soru için ben varsayılan biçimi zaten PST ayarlanmış olduğunu tahmin ediyorum, bu yüzden yeni bir tarih oluşturulduğunda böylece dilimi şey değiştirir ayarı, o zaman dilimi ile oluşturduğunuz oluyor. Bunu kontrol etmek ve bu durumda eğer görebilirsiniz. Ayrıca date_default_timezone_set('<tz>'); bakmak olabilir