PHP ile SQL damgası biçimlendirme

6 Cevap php

Ben bir zaman damgası alanı olan bir mySQL veritabanı var. Ben test ediyorum iken şu anda sadece bir giriş vardır, o

2010-02-20 13:14:09

Ben veritabanından çekerek ve kullanıyorum

echo date("m-d-Y",$r['newsDate'])

Benim Sonuç olarak gösteren

12-31-69

Herkes neden biliyor musun?

Edit: editedit: disregard that edit... the FTP addon for notepad++ timed out and unfortunately doesn't display an error when it can't synch.

6 Cevap

date function expects an UNIX timestamp ikinci parametre olarak - Eğer {kullanılarak yapılabilir bir UNIX zaman damgası DB olsun tarih, dönüştürmek zorunda kalıyoruz [(2)] } :

$db = '2010-02-20 13:14:09';
$timestamp = strtotime($db);
echo date("m-d-Y", $timestamp);

Ve alırsınız:

02-20-2010


You were passing the '2010-02-20 13:14:09' string to the date function ; that string is not a valid UNIX Timestamp.

'12-31-69 'bölgenizde, 1970-01-01 muhtemelen; 0 UNIX zaman damgası karşılık tarih - ve 1970-01-01 Epoch olduğunu.

Yeni başlayanlar için, php date() function ikinci değişken olarak saniye bekliyor. Demek tarihi yanlış görüntüleniyor neden oluşturmaktadır. Bu konuda bu source edin.

O zaman biz sadece sorgu bir tad değiştirmek doğru bir SQL timestamp tarihi biçimlendirmek için PHP almak için, bize sorunun cevabı sağlayan ...

SELECT author, `when`

Değiştirmek o ...

SELECT author, UNIX_TIMESTAMP(`when`)

Sonra yukarıda SQL sorgusu sonucu depolamak değişken, PHP tarih işlevini kullanın.

Sen sadece onun yerine MySQL'in date_format() işlevini kullanabilirsiniz:

SELECT date_format(timestampfield, '%m-%d-%Y') FROM table etc....

Bu geri PHP normal tarih dizeye sonra unix zaman içine gidiş-dönüş senin zaman damgası olan ve kurtaracak. İki yerine tek datetime biçimlendirme çağrı.

Tamam, ben bir hafta boyunca bu ile güreş (uzun ama ben ondan bir mola aldı).

Ben tablolardaki iki belirli alanları var

creationDate > timestamp > current_timestamp
editDate > timestamp > current_timestamp

Onlar 31 Aralık 1969 ya çekerek, ya da sadece bir şey ... can sıkıcı ... çok can sıkıcı edildi

mysql sorgusunda ben yaptım:

            unix_timestamp(creationDate) AS creationDate
            unix_timestamp(editDate) AS editDate

php dönüştürmek i did:

    $timestamp = $result_ar['creationDate'];
    $creationDate = date("Y-M-d (g:i:s a)", $timestamp)
            echo($creationDate);

    $editstamp = $result_ar['editDate'];
    $editDate = date("Y-M-d (g:i:s a)", $editstamp)
            echo($editDate);

Bu bana iade için benim sorun çözüldü

            2010-Jun-28 (5:33:39 pm)
            2010-Jun-28 (12:09:46 pm)

sırasıyla.

Ben bunu birisi yardımcı olur umarım ..

ben bu newble için yararlı olacağını düşünüyorum:

örnek MYSQL biçiminden tarihten itibaren temel çıkarma 1 saat:

$to='2013-25-10 22:56:00'; //curr time
$timestamp = strtotime($to); //convert to Unix timestamp
$timestamp = $timestamp-3600; //subtract 1 hour (3600 this is 1 hour in seconds)
echo date("Y-m-d H:i:s",$timestamp); //show new date

EDIT: kontrol ettikten sonra, bu MySQL PHP bir dize olarak bir timestamp döndürür görünür, bu nedenle bu sorunun cevabı sahte oldu :)

Neyse, 1969 yılında bir tarih almak nedeni localtime UTC sıfır unix zaman dönüştürme olduğunuzu muhtemelen. Unix zaman 1970 yılından beri saniye sayısıdır. Yani 0 değeri 1970 anlamına gelir. Siz probaby GMT-6, 31-12-69 olmak biter gibi, ofset negatif olan bir zaman diliminde yaşıyoruz.