MySQL ve PHP (UTC, 0000, Dilimlerinin) damgası karşılaştırma

2 Cevap php

Ben bir JSON Twitter yem verilen tarih ve saati, temsil eden bir dize MySQL zaman damgası sütun aralığında olup olmadığını belirlemek için çalışıyorum.

İşte örnek dize var:

'Sat, 31 Oct 2009 23:48:37 +0000',

+0000 göre olan API (created_at) gerçekten olduğunu gösterir UTC. Şimdi, strtotime kullanıyorum ve date sadece zamanını onaylamak için. Ile:

$t = 'Sat, 31 Oct 2009 23:48:37 +0000';
$timestamp = strtotime($t);

echo date('M d Y H:m:s', $timestamp);

Ben olsun Oct 31 2009 19:10:37. Ben +0000 kaldırırsanız ben almak Oct 31 2009 23:10:37. Yani sahip +0000 ve olmaması arasındaki fark 4 saattir. Ben çünkü benim yerel saatine (Maryland, USA = America/New_York) ve tabii ki UTC farklı olduğunu tahmin ediyorum.

Ben +0000 sıyırma ya da bu zaman damgası {vardır Benim veritabanında saklanan iki damgaları, aralığında olup olmadığını belirlemek için çalışırken bunu kullanarak olmalıdır eğer [(1)] oldukça emin değilim } ve 2009-11-25 12:00:00. Ben bu damgaları nüfuslu zaman ben, şimdi aptal hissediyorum ve biraz karışık YYYY-AA-GG H: M: S, bir örnek biçimi 10/31/2009 11:40 am bir JavaScript tarih saat seçici geldi ve ben bu yüzden gibi STR_TO_DATE kullanın :

STR_TO_DATE("10/31/2009 11:40 am", "%m/%d/%Y %l:%i %p")'),

Ben +0000 bırakın veya şerit gerekir? Mentally taps out

2 Cevap

Siz tabii ki doğru da setting the server timezone konum sağladı yılında timezone bilgi bırakmalısınız. Nokta Aksi takdirde ne, her zaman karşılaştırmalar kapalı 4 saat olacak. : O)

Eğer sonucu, yani UNIX zaman damgası olarak bırakmalısınız süresini karşılaştırmak için strtotime.

$twitterTS    = strtotime('Sat, 31 Oct 2009 23:48:37 +0000');
$localStartTS = strtotime('Sat, 31 Oct 2009 19:00:00'); // timezone is -0400 implicitly
$localEndTS   = strtotime('Sat, 31 Oct 2009 20:00:00');

if ($localStartTS <= $twitterTS && $twitterTS <= $localEndTS) {
    // twitter timestamp is within range
}

To clarify: Before comparing times from different timezones, make sure they're all converted to the same timezone. Comparing London time 20:00 to New York time 20:00 without timezone information will yield incorrect results. strtotime will convert all times to your local timezone; if timezone information is present in the input it will honor it and convert the time appropriately, otherwise it'll assume the time is already localized. If all the times in your database are local, you should absolutely make sure to localize all timestamps you want to compare against them.
An alternative strategy would be to always convert all times to UTC before storing or comparing them.

Sadece sürekli bunu, istediğini al.

PHP sadece böylece kendi bileşenlerine json twitter zaman yıkmak için alt dize işlevini kullanabilirsiniz

//'Sat, 31 Oct 2009 23:48:37 +0000'
$hour = substring($jsontime,18,2);
$minute = substring($jsontime,22,2);
...

$phpDatetime mktime($hour,$minute,$second,$month,$day,$year);

Oradan ben zaten bunu düşünüyorum. Dont 'GMT farklılıkların ayarlamak için unutmak.