PHP mySQL - UNIX_TIMESTAMP strtotime eşit değildir

4 Cevap php

PLATFORM: PHP & mySQL

Date ("Ymd H: i: s") Ben aşağıdaki biçimde veritabanında tarih + saati depolamak. Benim DB sahip bir değerin bir örneğidir: 2010-01-05 07:36:33. Benim komut, ben date_default_timezone_set("America/Chicago"); olarak dilimini belirledik

THE PROBLEM:

Ben bir yerde UNIX_TIMESTAMP hakkında okumak ve benim sorguda olduğu kullanıyordum. DB'den bir tarih değerinin üzerinde UNIX_TIMESTAMP değeri, strotime (DB tarih Değer) farklı gibi görünüyor.

EXAMPLE:

Consider that one of the DB values for the date column in my DB is 2010-01-05 07:36:33 Now if I fetch this date in the following way:

$result = mysql_query("SELECT date, UNIX_TIMESTAMP(date) AS ut_date FROM table");
$row = mysql_fetch_row($result);

//The result of this is:
$row['date']    = 2010-01-05 07:36:33
$row['ut_date'] = 1262657193
strtotime($row['date']) gives 1262698593

Benim uygulama içinde benim daha sonraki hesaplamalar için, ben strtotime (tarih) ile çalışmak gerekir. Ben bu şekilde yapmak için birçok karşılaştırmalar var. Benim sorun çözülmüş olurdu, UNIX_TIMESTAMP (tarih) strtotime (tarih) aynı oldu vardı. Ben çalışmak gerekiyor örnek sorgu biridir:

$gap = 1; // time in minutes
$tm2 = date ("Y-m-d H:i:s", mktime (date("H"),date("i")-$gap,date("s"),date("m"),date("d"),date("Y")));
$target = strtotime($tm2);

$result2 = mysql_query("UPDATE table2 SET stat = 0 WHERE UNIX_TIMESTAMP(today_login_time) < $target ");

Yukarıdaki bana yanlış sonuçlar veriyor. Ben yukarıdaki sorguda strtotime ile UNIX_TIMESTAMP değiştirmeye çalışırsanız işlevi strtotime PHP fonksiyon ve ilgili değil mySQL fonksiyonu gibi görünüyor, bana bir hata veriyor. Strtotime için ayrı bir mySQL işlevi var mı? Nasıl Yukarıdaki sorunu çözmek mi? The code Yukarıdaki sorunu çözmek için son derece takdir edilmektedir.

Şimdiden teşekkür ederim.

4 Cevap

Probably the timezones of your MySQL server and your php instance differ. e.g.

echo date('Y-m-d H:i:s T', 1262657193);

benim makinede baskılar 2010-01-05 03:06:33 CET (yani UTC +1 bulunuyor, CET dilimini not) MySQL sunucu 2010-01-05 07:36:33 olarak aynı unix zaman damgası yorumlar ise

see http://dev.mysql.com/doc/refman/5.1/en/time-zone-support.html
and http://docs.php.net/datetime.configuration#ini.date.timezone

Eğer bir yerde sorgu için UNIX için sql damgası dönüştürmek gerekmez. bu işler çok daha basit hale getirir DATE_FORMAT sadece kullanmak:

 WHERE DATE_FORMAT(`today_login_time`, "%Y-%m-%d") < '.date('Y-m-d', $my_tsp)

Fark tam 11.5 saat olduğu, bu saat dilimleri ile sorunlar yaşıyorsanız görünüyor.

Biçiminde tarih ("Ymd H: i: s") bir dilimini içermez, çünkü doğru bir tarih ve zaman tarif etmez. Hiçbir timezone sağlanan yana, web sunucusu ve veritabanı hem açıkça farklı olan saat dilimlerini kullanıyor.

Sen bir Unix zaman damgası olarak veritabanında tarihleri ​​depolamak düşünmelisiniz. Bir unix zaman damgası Unix Epoch yana geçen saniye sadece sayısı (1 Ocak 1970 00:00:00 GMT) 'dir. Bu saat dilimleri veya gün ışığı tasarrufu tarafından etkilenmez. Bu şekilde, sadece gerçek bir takvim gününde ve zamanında dönüştürürken TimeZones ve günışığı tasarruf endişelenmenize gerek olacaktır.