PHP ve MySQL arasındaki yönetme tarih biçimleri farklılıklar

6 Cevap php

Ben doğrudan tarihleri ​​ile başa çıkmak için, ve böylece doğrudan PHP ve MySQL farklı tarih biçimleri sahip olduğu gerçeği ile başa çıkmak için benim ilk PHP app yazıyorum.

Benim soru: Bu fark yönetmek için en şık yolu nedir?

Ben php kullanarak fark yönetmek için aşağıdaki iki işlevi vardır:

function mysql_date($php_date)  {
    return date( 'Y-m-d H:i:s', $php_date );
}

function php_date($mysql_date) {
    $val = explode(" ",$mysql_date);
    $date = explode("-",$val[0]);
    $time = explode(":",$val[1]);
    return mktime($time[0],$time[1],$time[2],$date[1],$date[2],$date[0]);
}

benim SQL sorguları içinde doğrudan bu yönetmek için basit bir yolu var mı?

Yoksa bu yönetmek için başka daha şık bir yol önerebilirsiniz?

6 Cevap

Sen php_date strtotime ile değiştirebilirsiniz.

$php = strtotime($mysql);

MySQL eşdeğer UNIX_TIMESTAMP olurdu.

Eğer SQL biçimlendirme işlemek istiyorsanız rağmen, DATE_FORMAT MySQL denemek.

(Yaklaşık) PHP 5.2 yana, PHP, Tarihler ve Times ile başa çıkmak için sınıf / nesne inşa denilen DateTime olmuştur. Bir boşlukta, bu dağınık detayları kendiniz ile çekişmeyi daha yerleşik kullanmak her zaman daha iyidir.

DateTime yapıcısı (veya date_create işlevi) strtotime tarafından anlaşılan herhangi bir biçimde bir tarih kabul eder. Eğer strtotime hakkında bilmeniz gereken tüm doğru hemen her dize biçiminde bir tarih tanıyacağı sihirli büyüsü olduğunu. Ben ilk strtotime karşılaştı zaman sana ("bu saçmalık / güvenilmez görünüyor") şimdi yaşıyorsanız aynı iç tepki vardı. Bu değil. Bu sadece tarihlerin kendi kırılgan anlayış asla bir şekilde çalışır (sen tarihleri ​​anlamak düşünüyorsanız ve siz. Trust Me yoktur.)

Yani, bir Tarih / Saat dize olarak MySQL bilgileri çekin ve hemen bir PHP tarih Nesnesi oluşturmak. DATE_FORMAT yöntemini kullanın (bazı handy constants) / ne zaman bir dize olarak yeniden tarih gerekiyorsa.

UTC bir datetime alanda veritabanında her şeyi saklayın. PHP manipülasyon için, PEAR Date kitaplığı kullanın. Ben büyük bir ARMUT kullanıcı değilim, ama bu kitaplık fantastik ve endişesi zaman harcama gerektiğini can sıkıcı tarih dönüştürme tüm sorunları idare edecek.

Sonra bir unix zaman damgası almak için strtotime() kullanın ve date() biçimlendirmek için, size kullanıcıya görüntüler için ihtiyacınız kadar mysql formatında her şeyi tutmak öneriyoruz.

Bazı Macar Gösterimi atmak eğer yanlış gitmek için bile zor bulunuyor:

$ymdDateAdded = date('Y-m-d');
$timeDateAdded = strtotime($ymdDateAdded);
$userDateadded = date('j F Y', $timeDateAdded);

Ben DB alanında unix damgaları depolamak için daha iyi bir ideea olacağını düşünüyorum. Eğer insan diline tarihleri ​​görüntülemek için gerektiğinde, her zaman PHP'nin date () işlevini kullanabilirsiniz. Her şey için, sadece sayısal zaman damgası kullanın.

Sadece bunu ihtiyaç olarak tarih dönüştürür küçük bir tarih nesnesi yapabilir

$Date_p = new MagicDate($php_date);
$Date_m = new MagicDate($mysql_date);

$Date_p ve $Date_m sadece yine nesneyi tohum olduğunu gösteriyoruz yapmanız gerekir. Bir mysql tarih istediğiniz zaman kodu gibi olurdu. Gerçekçi o $Date gibi oldukça genel bir şey olurdu.

$query = "UPDATE SET Date='".$Date_p->toMysql()."' "...

ve tam tersi tersini gerektiğinde. Sen zaten oluşturduğunuz işlevleri kullanabilirsiniz. Tıpkı yapı yönteminde bir "algılayıcı" ekleyin:

public function __construct($date)
{
    $phpdate = strtotime($date);
    if($phpdate) 
    {
        $this->phpdate = $phpdate;
        $this->mysqldate = $this->mysql_date($phpdate);
    }
    else
    {
        $this->phpdate = $this->php_date($phpdate);
        $this->mysqldate = $phpdate;
    }
}

Kötü gitmek şeyleri yakalamak için işleme bazı hata atmak. İki tarih için getter ekleyin. Ve bu bir dizi bu kadar ve bu durum unutma. İhtiyacınız olduğunda sadece doğru tarih çekin.

Orada bazı optimizasyonlar olabilir, ama bu sadece işe nasıl size göstermek için olabilir.