PHP / MySQL timezone yardım

3 Cevap php

Ben herkesin çözüm biliyor ve sonra da bir milyon upvotes olsun ama gerçeklik Ben toplam 100% şaşırıp olduğunu düşünüyor, şimdi hafta boyunca zaman dilimini bir mücadele olmuştur, hiç PHP / MySQL timezone destek için verilen hiçbir cevap 100% çalıştı Benim için, o yüzden çok ayrıntılı olarak burada tekrar soruyu soruyorum ben belki örnek kod ve tüm olabildiğince.

Eğer bir PHP / MySQL uzmanı, ya da deli iyi şans bile bir begginner ve PHP / MySQL / kullanıcı sunulan timezone çalışma kazanılmış varsa, o zaman yardım lütfen.

Aşağıda ben bugüne kadar ne var, ben yaşıyorum konularda ne tür görmek için yorumları okuyun. Bu "1262819848" gibi bir zaman damgası şeklinde ise temelde ben kullanıcıların timezone bir tarih ve zamanı gösterebilir ama MySQL yeni sürümleri yerine, bu gibi "2010-01-06 23:17:28" a dönmek ZAMAN .

(": D: YH: i: m s A", $ zaman_damgası) Bu tarihten içine "2010-01-06 23:17:28" geçmek olsaydı o işler BÜYÜK çalışmak istiyorsunuz ama bunun yerine içeri paased bir zaman damgası ihtiyacı Bunu yapabilirim tek yolu MySQL bir tamsayı alanında gerçek bir zaman damgası saklamak VEYA başka "2010-01-06 23:17:28" değerini almak eather ve sonra sadece çok etmek gibi görünüyor bir zaman damgası dönüştürmek için Ben saklayabilirsiniz havai zaman zaten bir INT alana dönüştürülecek.

O zaman ben çok yardım takdir ediyorum bana bir datetime işlevlerini kullanmanıza yardımcı olabilir, ben şimdi bir kaç yıldır bu sorun takılıp edilmiştir. Ben herkes gibi tamsayı alanı vazgeçmek ve kullanmak üzereyim SO nedense kötü olduğunu söylüyor.

<?PHP
/////////////////////////////////////////////////////////
//   Get a MySQL time / date and show in user timezone //
////////////////////////////////////////////////////////

//set the user's time zone for this page
//this assumes the user has already chosen a timezone and we are getting it from a PHP session value now
// example value is "America/New_York" which is -5
date_default_timezone_set($_SESSION['time_zone']);

// get a MySQL result with a time/date value in it
$sql = 'SELECT user_id,date from online_users WHERE user_id = 1';
$result = executeQuery($sql);

// set our date/time value from MySQL into a variable
if ($line_online = mysql_fetch_assoc($result)){
    $time_stamp = $line_online['date'];
}

// format our date/time value TIMESTAMP any way we like now!
// MySQL result MUST be in this format '1262291376'
$date_format = date("m:d:y h:i:s A",$time_stamp); // formats timestamp in mm:dd:yy 
echo $date_format;


/////////////////////////////////////////////////////////
//   Add a time / date to MySQL                       //
////////////////////////////////////////////////////////

// this add a time and date to MySQL and looks like this in the MySQL table "2010-01-06 23:17:28"
// that is a TIMESTAMP field in MySQL, newer version of mysql store a timestamp like this "2010-01-06 23:17:28" instead of like this "1262819848"
$sql = "INSERT INTO users (`id`, `datetime`) VALUES ('', UTC_TIMESTAMP())";
executeQuery($sql);

// So if I query this record and try to show it like I do in the code above in the "Get mysql result section" It will not work correctly because  
// because it is like this "2010-01-06 23:17:28" instead of like this "1262819848"
// The ONLY solution I have found is to store the UTC timestamp into an INTEGER field instead of a DATETIME or TIMESTAMP field.
// Everyone on this site says this is wrong and I could use the default date and time stuff but I have yet to get it working.
// If I could store a timestamp in mysql like a timestamp with no "-" dashes in it, then it would work correctly when I show it on page.
// Basicly I have this half done, I can show the time and date in a users timezone as long as I pass the PHP a real TIMESTAMP like this "1262819848"

?>

Ben en kısa sürede en edeyim bu bir lütuf başlayacak böylece benzer bir soruya geçmiş yanıtlara dayanarak, artı PHP / MySQL ve saat dilimleri ile ilgili bu sitede her yazı okurken, ben muhtemelen bu sorunu çözmek olmaz. Teşekkürler

3 Cevap

PHP strtotime () PHP UNIX dönem damgası içine veritabanı datetime biçimi geçmek için bir yoldur. It), anlaşılabilir ve standart formatları okur ve UNIX çağ damgası dönüştürür, daha sonra, tarih (php gibi diğer datetime işlevleri tarafından kullanılabilecek.

Alternatifleri gibi olabilir:

MySQL UNIX_TIMESTAMP () fonksiyonu UNIX timestamp içine belirli bir sütun datetime veya timestamp değeri dönüştürmek için yardımcı olur. De belirtildiği gibi bu MySQL sunucu tarafında yapılır çünkü http://stackoverflow.com/questions/455554/datetime-to-unix-timestamp/455573#455573 biraz daha hızlı olabilir.

Bu zaman dilimi soru daha damgası daha fazla görünüyor.

Daha fazla bilgi:

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

http://www.php.net/strtotime

Öncelikle, bir programlama problemine bir çözüm varsa burada benim tavsiyem: KULLANIN. Senin çözümün doğruluğu hakkında stackoverflow fıstık galerisi ikna endişe etmeyin.

Dedi sahip, burada benim iki bit var:

Kullanıcı kendi zaman dilimi içinde bir tarihi gösteren bir ekran / ön-uç bir konudur. Kod & hem iç tarihleri Veritabanı sonra ekranda kullanıcının timezone tercüme ortak bir zaman dilimi için standardize edilmelidir.

Bunun yerine kullanıcı tarafından sağlanan timezone date_default_timezone_set ayar, UTC betiğin varsayılan zaman dilimini (yani MySQL zaman damgası / datetime değerini maçları) ve ardından standart tarihe ofset kullanıcının dilimini geçerlidir. Bir kullanıcı gibi bir datetime tedarik ederse $mydate= 01/01/2010 5:30pm bu tarihten ofset kullanıcının tz uygulamak, ve strtotime("$mydate $mytimezone") burada $ gibi strtotime, bir şey kullanarak tz standartlaştırılmış dönüştürmek mytimezone kullanıcı tarafından sağlanan timezone veya ofset.

if I could pass "2010-01-06 23:17:28" into this date("m:d:y h:i:s A",$time_stamp)

belki ile: date ('m: d: YH: i: s A', strtotime ('2010-01-06 23:17:28 '))