individuelle Zeitformatierung

Paula

Erfahrenes Mitglied
Servus zusammen,

ich habe diverse Logfiles und dabei tauchen verschiedene Zeitfelder auf. Alle Zeitfelder möchte ich gerne in einen timestamp verwandeln. Das Zeitfeld auszulesen stellt keine Schwierigkeit dar, jedoch die Formatierung. Ich habe mir gedacht, dass die manuelle Eingabe des Formats hilfreich sein wird, aber bei der Umsetzung hakt es ein wenig. Hier einige Beispiele:
PHP:
$time_1   = '041118 15:30';
$format_1 = 'yymmdd HH:jj';

$time_2   = '01-01-1970-12-00';
$format_2 = 'dd-mm-yyyy-HH-jj';
Also die $time Variable wird aus dem Logfile gelesen und die $format Variable wird per Formular eingegeben.

Wie würdet ihr die Daten auswerten um einen timestamp zu erhalten? Ich steh irgendwie ein wenig aufm Schlauch.


Gruß
 
Wie würdet ihr die Daten auswerten um einen timestamp zu erhalten? Ich steh irgendwie ein wenig aufm Schlauch.

Probier es einmal so.
PHP:
<?php    
     function time_1($x){
     $x  = str_replace(' ','',$x);
     $x  = str_replace(':','',$x);
     $x = chunk_split($x,2,'-');
     $x = explode('-',$x);
     return mktime($x[3],$x[4],0,$x[1],$x[2],$x[0]);
     }
     
     $time_1   = '041118 15:30';
     echo time_1($time_1);
?>
 
Danke für deine Antwort, aber deine Lösung ist leider sehr unflexibel. Ich habe derweil folgende Lösung finden können:
PHP:
function make_timestamp( $date, $format ) {


    // Möglichkeiten für die Zeitformatierung
    $options_array = array( 'H', 'i', 's', 'm', 'd', 'y' );

    // Schleife in der Länge des Zeitfeldes
    for( $i = 0; $i < strlen( $date ); $i++ ) {

        // Prüfung ob ein einzelnes Zeichen relevant ist
        if( array_search( $format{$i}, $options_array ) !== false ) {
            // Wert speichern
            $collector[$format{$i}][] = $date{$i};
        }

    }


    // Durchlauf des Arrays für die Möglichkeiten der Zeitformatierung
    foreach( $options_array as $option ) {

        unset( $value );

        // Zusammenfassung der Werte
        foreach( $collector[$option] as $foobar ) {
            $value.= $foobar;
        }

        // sollte kein Wert angegeben sein
        if( empty( $value ) ) {
            // z.B. häufig bei Sekunden
            $value = 0;
        }
        // sollte das Jahr nicht vier Stellen haben
        // es wird einfach vorrausgesetzt, dass zwei Stellen vorhanden sind
        if( $option == 'y' and strlen( $value ) < 4 ) {
            if( date( 'Y' ) <= 20 . $value ) {
                // z.B. 97 => 1997
                $value = 19 . $value;
            }
            else {
                // z.B. 04 => 2004
                $value = 20 . $value;
            }
        }

        // Speichern des nutzbaren Zeitwertes
        $time[$option] = $value;
        // Festlegung des Typs integer // eigentlich nicht notwendig
        settype( $time[$option], 'integer' );

    }


    // Erstellung und Rückgabe des Zeitstempels
    $timestamp = mktime( $time['H'], $time['i'], $time['s'], $time['m'], $time['d'], $time['y'] );
    return $timestamp;


}
 
Dann hier noch eine Möglichkeit, die dann flexibler ist.

PHP:
<?php    
    
    function mktime_timestamp($date,$format){
    for($a=0;$a < strlen($date);$a++){
    $times[$format[$a]][]= $date[$a];// Array zusammenfügen    
    }
    $hour = $times['H'][0].$times['H'][1];
    $min = $times['i'][0].$times['i'][1];
    if(!isset($times['s'])){
       $sec = '0';
    }
    else{
         $sec = $times['s'][0].$times['s'][1];
    }
    $day = $times['d'][0].$times['d'][1];
    $mon = $times['m'][0].$times['m'][1];
    $year = $times['y'][0].$times['y'][1].$times['y'][2].$times['y'][3];
    $mktime = mktime($hour,$min,$sec,$mon,$day,$year);
    return $mktime;
    }
    
    $time_1   = '041118 15:30';
    $format_1 = 'yymmdd HH:ii';
    $time_2   = '01-01-1999-12-00';
    $format_2 = 'dd-mm-yyyy-HH-ii'; 

    $timestamp_1 = mktime_timestamp($time_1,$format_1);
    echo date('d.m.y H:i',$timestamp_1);
    $timestamp_2 = mktime_timestamp($time_2,$format_2);
    echo date('d.m.Y H:i',$timestamp_2);
?>
 
Zurück