ein formular in der der user ein datum eingibt soll in timestamp umgewandelt werden

flokli

Erfahrenes Mitglied
Hi,

habe ein etwas seltsames Problem...

User geben über ein Formular Datensätze ein.
Dort gibt es auch Felder, in denen er ein Datum (+ Uhrzeit?) eingibt.
Und zwar so: "dd.mm.yyyy" oder "dd.mm.yyyy hh:mm".
Gibt es in PHP eine Funktion, mit der ich diese 2 Datum/Zeit-Strings umwandeln kann (nicht im strotime-konformen Format "2005-12-25 00:56:27 GMT") in einen Timestamp?
 
Hallo,
zerlege den String doch mit [phpf]explode[/phpf] und erstelle dann mit [phpf]mktime[/phpf] den Zeitstempel.

mfg
forsterm
 
Uff...
Also Suchmuster ob xx:xx vorhanden ist, dann einen explode vor der Uhrzeit und wenn Uhrzeit vorhanden ist die auch noch exploden...dann alles fein säuberlich in Variablen speichern und dann durch diese Funktion jagen oder wie?

Ich bekomme den Check ob noch eine Uhrzeit vorhanden ist nicht hin...
Hat jemand eine Idee?
 
mit Exlode zerlegt er dir die Formulareingabe ja in einzelne Bruchstücke, z.B. könntest du deren Anzahl bestimmen (5 bei Datum + Zeit - oder halt 3 bei reinem Datum).

Hast du Datum & Zeit in getrennten Formularfeldern, oder ein gemeinsames? Mit einem regulärem Ausdruck kannst du das sicher auch analysieren.
 
Du könntest auch einfach auf die [phpf]strtotime[/phpf]-Funktion zurückgreifen. Oder du benutzt folgende Funktion:
PHP:
<?php
error_reporting(E_ALL);

function foo($str, $dSep = '.', $dtSep = ' ', $tSep = ':') {
	
	if(strpos($str, $dtSep) !== false){
	  	
	  	list($date, $time) = explode($dtSep, $str);
	  	
	  	list($day, $month, $year) = explode($dSep, $date);
	  	
	  	list($hour, $minute) = explode($tSep, $time);
	  	
	} else{
	  
	  	list($day, $month, $year) = explode($dSep, $str);	  
	  
	}
	
	return mktime(isset($hour) ? $hour : 0, isset($minute) ? $minute : 0, 0, $month, $day, $year);
	
} 
?>
 
Zuletzt bearbeitet:
Hallo,

hier kann man auch schön mit regulären Ausdrücken arbeiten:
PHP:
<?php

$eingabe = '24.06.2006 17:00';

$isoish_time = preg_replace('/^(\d\d)\.(\d\d)\.(\d{4})(\s+\d\d:\d\d)?$/', '\3-\2-\1\4', $eingabe);
$timestamp = strtotime($isoish_time);

?>

Grüße,
Matthias
 
Es ist 1 Feld.
Strtotime will ich nicht verwenden, und der User kann 2 verschiedene Formate benutzen: "tt.mm.yyyy" oder "tt.mm.yyyy hh:mm"
 
Probier mal diese Punktion :

PHP:
function foo($str = 0, $dSep = '.', $dtSep = ' ', $tSep = ':'){
    if (isset($str) and $str<>0)
        list($datum, $zeit) = explode($dtSep, $str);
    if (isset($zeit) and $zeit<>0)
        list($Stunden, $minuten, $sekunden) = explode($tSep, $zeit);
    if (isset($datum) and $datum<>0)
        list($tag, $monat, $jahr) = explode($dSep, $datum);

    $tsp = mktime($Stunden, $minuten, $sekunden, $monat, $tag, $jahr);

    return ($tsp);
}
 
hab mal die letzte funktion benutzt und in ein Script eingebettet:

PHP:
<?php
error_reporting(E_ALL);
function foo($str = 0, $dSep = '.', $dtSep = ' ', $tSep = ':'){
    if (isset($str) and $str<>0)
        list($datum, $zeit) = explode($dtSep, $str);
    if (isset($zeit) and $zeit<>0)
        list($Stunden, $minuten, $sekunden) = explode($tSep, $zeit);
    if (isset($datum) and $datum<>0)
        list($tag, $monat, $jahr) = explode($dSep, $datum);

    $tsp = mktime($Stunden, $minuten, $sekunden, $monat, $tag, $jahr);

    return ($tsp);
}

if(isset($_GET['str'])){
echo "Urspr&uuml;nglicher String: $_GET[str]<br />";
echo "Neuer Timestamp: ".foo($_GET['str'])."<br />";
echo "Und durch Date(\"d.m.Y H:i\") gejagt: ".date("d.m.Y H:i", foo($_GET['str']));
}
?>

Wenn ich jetzt das Script mit ?str=24.06.2006%2019:11 aufrufe, kommen 2 Notices raus:

Code:
Ursprünglicher String: 24.06.2006 19:11

Notice: Undefined offset: 2 in /srv/www/vhosts/diesv.de/httpdocs/php/test.php on line 7
Neuer Timestamp: 1151169060

Notice: Undefined offset: 2 in /srv/www/vhosts/diesv.de/httpdocs/php/test.php on line 7
Und durch Date("d.m.Y H:i") gejagt: 24.06.2006 19:11

Ist die Notice wichtig?
 
Zuletzt bearbeitet:
Zurück