2016-04-12 23 views
1

DDMMMYY biçiminde depolanan doğum günlerine sahibim. Bunları tarih değerlerine dönüştürmem gerekiyor, bu yüzden bunları veritabanında saklayabilirim.Doğum tarihini DDMMMYY biçiminde dönüştürmek, PHP'de tarih değerine dönüştürür.

Bu tarihin geçmişte olması gereken strtotime işlevine kolay bir yol var mı?

<?php 
$datestring = '22SEP41'; 
echo date('Y-m-d',strtotime($datestring)); //outputs 2041-09-22, should be 1941-09-22 
?> 
+1

Hangi yıl için $ datestring = '22SEP15'; '? 1915 veya 2015? Dizenizin son 2 karakterini okuyun ve eğer belirli bir kesintiden sonra, '19' veya '20' ekleyerek uygun olarak değiştirin. –

+0

Yıl iki basamaklı bir biçimde belirtilmişse, 0- arasındaki değerler 69, 2000-2069 arasında haritalanmıştır ve 70-100 arasındaki değerler 1970-2000 ile eşleştirilmiştir. http://www.w3schools.com/php/func_date_strtotime.asp –

cevap

1
<?php 
$datestring = '22SEP41'; 

$matches = []; 
preg_match('/([0-9]{2})([A-Z]{3})([0-9]{2})/', $datestring, $matches); 

$prefix = ($matches[3] <= date('y') ? '20' : '19'); 

$matches[3] = "{$prefix}{$matches[3]}"; 

$ts = strtotime("{$matches[1]} {$matches[2]} {$matches[3]}"); 

// date ('Y-m-d', $ts) == 1941-09-22 

Bu 22SEP06 2006 yerine 1906 olarak yorumlanması gereken varsayar aradığınız ne Umut -> 2016

0

Sen gibi bir şey deneyebilirsiniz: benim yerel makinede test

$ds = '22SEP41'; 

$day = $ds[0].$ds[1]; 

// Getting the month. 
$mon = array(
    'JAN' => 1, 
    'FEB' => 2, 
    'MAR' => 3, 
    'APR' => 4, 
    'MAY' => 5, 
    'JUN' => 6, 
    'JUL' => 7, 
    'AUG' => 8, 
    'SEP' => 9, 
    'OCT' => 10, 
    'NOV' => 11, 
    'DEC' => 12 
); 

$mont = $ds[2].$ds[3].$ds[4]; 
$month = $mon[$mont]; // Gets the month real. 

$year = '19'.$ds[5].$ds[6]; 

$final = $day.'-'.$month.'-'.$year; 

ve işe yaradı. Çalışır ve :)

1

- temelde çıktı üretmesi 1917 aralığını verir

$date = date_create($datestring); 
if($date->diff(date_create())->invert) 
{ 
    $date->modify('-100 years'); 
} 
echo $date->format('Y-m-d'); 

$datestring = '22SEP41'; 
için: standart değerlendirdi tarihinden sonra bugün sadece bu yöntem son yüzyıl tarihini oluşturur

çıktı şöyledir:

1941-09-22 

çıkışı

$datestring = '22SEP01'; 

için: Temelde

2001-09-22 

eval.in demo

, biz Verilen dize göre bir DateTime oluşturmak, o zaman mevcut gün ile farkı hesaplamak; Fark negatifse (->invert), tarihten itibaren 1 yüzyıl çıkarırız.

Bu koşulu, ->invert yerine ->format('%R%Y') kullanarak kişiselleştirebilirsiniz. Bu örnekte: 05 boyunca 00 den

if($date->diff(date_create())->format('%R%Y') < 10) 

Tarihler 2000-2005 olarak değerlendirilmiştir olarak.