2016-04-12 9 views
1

Ich habe Haufen von Geburtstagen, die im Format DDMMMYY gespeichert sind. Ich muss diese in Datumswerte konvertieren, damit ich diese in der Datenbank speichern kann.Konvertieren Geburtstag im Format DDMMMYY zu Datum Wert in PHP

Gibt es eine einfache Möglichkeit, der strtotime-Funktion mitzuteilen, dass das Datum in der Vergangenheit liegen muss?

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

Welches Jahr erwarten Sie von einem Datum von $ datestring = '22SEP15'; '? 1915 oder 2015? Lesen Sie die letzten 2 Zeichen Ihres Strings, und wenn er nach einem bestimmten Cut-off ist, ändern Sie ihn, indem Sie '19' oder' 20' hinzufügen. –

+0

Wenn das Jahr in einem zweistelligen Format angegeben ist, werden Werte zwischen 69 werden auf 2000-2069 abgebildet und Werte zwischen 70-100 werden auf 1970-2000 abgebildet. http://www.w3schools.com/php/func_date_strtotime.asp –

Antwort

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 

Dies setzt voraus, dass 22SEP06 sollte statt 1906 als 2006 interpretiert werden - im Grunde ist es die Ausgabe einer Reihe von 1917 gibt -> 2016.

0

Sie könnten versuchen, so etwas wie:

$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; 

ich es auf meinem lokalen Rechner getestet und es funktioniert. Hoffe, dass es funktioniert und ist das, was Sie suchen :)

1

Dieses Verfahren ein Datum des letzten Jahrhunderts nur erstellen, wenn Standard bewertet Datum nach dem heutigen Tag ist:

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

Für

$datestring = '22SEP41'; 

der Ausgang ist:

1941-09-22 

Für

$datestring = '22SEP01'; 

der Ausgang ist:

2001-09-22 

eval.in demo

Grundsätzlich wir Erstellen Sie eine DateTime basierend auf einer gegebenen Zeichenfolge, dann berechnen wir die Differenz zum aktuellen Tag; Wenn die Differenz negativ ist (->invert), ziehen wir 1 Jahrhundert vom Datum ab.

Sie können den Zustand mit ->format('%R%Y') anstelle von ->invert personalisieren. In diesem Beispiel:

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

Daten von 00 durch 05 wie 2000-2005 bewertet.