2013-03-28 16 views
11

bir tarih UK biçiminde giriş kılan bir biçime sahiptir, veBiçim tarihi gg/aa/yyyy

yyyy-mm-dd 

örneğin dönüştürmek gerekir Girilen tarih: 31/03/2013 veritabanı eki için '2013-03-31''a dönüştürmek istiyorum.

$dateInput = $mysqli->real_escape_string($_POST['date']); 
$show_date = date('Y-m-d', strtotime($dateInput)); 

Bunu yapmak için daha iyi bir yolu var mı:

ben tuhaf sadece bazen çalışır aşağıdaki kullanıyorum?

+0

çalışacaktır. Neden tarih değerinden kaçıyorsunuz .... aslında herhangi bir amaca hizmet ediyor mu? –

+0

Bu ne zaman düzgün çalışmıyor? Ayrıca, kaçmak iyi bir fikir gibi görünmüyor (ya da en azından tarih formatı doğruysa işe yaramıyor gibi görünüyor). Belki başlangıç ​​formatını kontrol etmek için bir regex kullanmayı düşünmelisiniz. – Uby

+1

@Darren, bunun işe yaramamasının nedeni, PHP'nin tarihin ABD formatında olmasını beklemesidir. Hiç değilse, bunu strtotime() 'a aktarmadan önce yeniden düzenlemelisiniz. http://stackoverflow.com/questions/4163641/php-using-strtotime-with-a-uk-date-format-dd-mm-yy – Tushar

cevap

15

Sen DateTime::createFromFormat kullanmak isteyebilirsiniz: tuhaf sadece bazen çalışır

$show_date = DateTime::createFromFormat('d/m/Y', $dateInput)->format('Y-m-d'); 
+0

Fikir iyi, ama 'date_parse_from_format'' '' '' date '' date' ikinci giriş olarak int 'kabul ederken döndürür. – Voitcus

+0

Oh Üzgünüz, zaten düzenlediniz. – Voitcus

+0

@Voitcus Evet, sadece – sroes

3

aşağıdakileri:

$show_date = date('Y-m-d', strtotime($dateInput)); 

bunu yapmak için başka kısa yoldur .... ve Bunu tüm hayatım boyunca kullanıyorum .. şu ana kadar devam eden herhangi bir şey olduğunu farketmiyoruz ..

Gelen dize tarihleri ​​ayrıştırmak için - Tarih() sözdizimi kullanılarak -

otherway PHP 5,3

$timestamp = strtotime(str_replace('/', '.', $dateInput)); 
$mysql_date = date('Y-m-d', $timestamp); 
+1

Eğik çizgilerle, strtotime(), İngiltere biçiminde bir tarih değil, ABD biçiminde bir tarih bekler, bu yüzden bazı değerler için hata yapar. – Tushar

+1

Her zaman 02/03/04 2 Mart 2004, 4 Mart 2002, 3 Şubat 2004 ya da ... merak ediyorum. PHP'nin her zaman en son olasılığı aldığını düşünüyorum, bu yüzden bu girişte verilen şey değil. – Voitcus

+0

@Tushar Teşekkürler, bu, hurmalandığı tarihlere baktığımda mantıklı. –

1

ve yukarı

Kullanım DateTime::createFromFormat. Size kesin bir maske belirlemenizi sağlar yapmak.

PHP 5.2 ve daha düşük

Sen elemanları ayrıştırmak zorunda kalacak

(yıl, ay, gün, saat, dakika, saniye) manuel substr() kullanıyor ve size bir zaman damgası inşa edecek mktime() sonuçları uzat.

+0

O zaten 'strtotime() ' – Uby

11

bunu deneyin.

$dateInput = explode('/','31/03/2013'); 
$ukDate = $dateInput[2].'-'.$dateInput[1].'-'.$dateInput[0]; 
+0

kullanıyor. Preg_replace (one-line) ile farklı bir tane yaptım. –

+0

Ayrıca dize dizi gösterimi kullanarak patlayabilir gibi herhangi bir işlev olmadan bunu yapabilirsiniz. –

0

Alternatif yöntemler bir çift. Her iki çıkış 2013/03/31:

Yöntem 1 - "Bakın ma, hiçbir fonksiyonlar"

<?php 
    $in = '31/03/2013'; 
    echo $in[6].$in[7].$in[8].$in[9].'-'.$in[3].$in[4].'-'.$in[0].$in[1]; 
    ?>  

Yöntem 2 - regex

<?php 
    echo ($output = preg_replace('!^([0-9]{2})/([0-9]{2})/([0-9]{4})$!',"$3-$2-$1",$input)); 
?> 
0

bu deneyin:

$dte = '28/03/2013'; 
$dt = new DateTime(); 
$date = $dt->createFromFormat('d/m/Y', $dte); 
echo $date->format('Y-m-d'); 

Çıkış: 2013-03-28

0
$date_array = explode("/",$your_date); // split the array 
$var_day = $date_array[0]; //day seqment 
$var_month = $date_array[1]; //month segment 
$var_year = $date_array[2]; //year segment 
echo $new_date_format = "$var_year-$var_day-$var_month"; // join them together 

Bu,