ERLEDIGT
JA
JA
ANTWORTEN
14
14
ZUGRIFFE
2072
2072
EMPFEHLEN
-
24.06.08 18:43 #1
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Hallo Leute,
ich bin gerade auf der Suche nach einer Funktion (sowas wie "parseDateByFormat") der ich einen String als Datum (z.B.'2008-06-14 17:43:02') und ein entsprechendes Format (z.B. 'Y-M-D H:i:s') übergebe und die mir aus diesen Angaben dann einen Unix-Timestamp macht. Das Format soll dabei variieren können (und das Datum vom Aufbau her auch!). Vielleicht bin ich ja nur zu blind und finde die Funktion (-skette) nicht. Ich bin kurz davor mir da selbst etwas zu basteln.
Danke für Eure Tips.
Gruß,
ShockshellGeändert von shockshell (24.06.08 um 18:46 Uhr)
Nichts hält so lange wie ein Provisorium....
-
Findest Du hier!
-
24.06.08 19:03 #3
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Hi,
das ist es gerade nicht was ich will, weil ich bei dieser Funktion bereits die einzelnen Segmente (Monat, Tag, etc.) extrahiert haben muss um sie an die Funktion zu übergeben. Ich befinde mich sozusagen davor. Ich habe einen Datum im Stringformat und ein dazugehöriges Format. Nun muss ich die einzelnen Teile des Datums diesem Format zuordnen. Sonst weiss ich nicht was ich in die Segmente eintragen muss. Und genau das ist es was mir fehlt. Der Rest (mktime) ist einfach.
Gruß,
shockshell.Geändert von shockshell (24.06.08 um 19:08 Uhr)
Nichts hält so lange wie ein Provisorium....
-
Wie wäre es denn mit der (fast) so genannten Funktion strtotime()?
-
24.06.08 22:47 #5
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Das ist schon dicht dran, aber leider nur der halbe Weg. Ich kann leider nicht davon ausgehen, dass das Datum in einem "englischen" Format geliefert wird. Es sollte wie gesagt "beliebig" sein.
Gruß,
ShockshellNichts hält so lange wie ein Provisorium....
-
Dann wirst du wohl an regulären Ausdrücken kaum vorbeikommen.
-
24.06.08 23:11 #7
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Das hab ich mir fast schon gedacht. Bin gerade dabei mir etwas zu basteln. Werde meine Lösung bei Fertigstellung hier mal posten... Solange lasse ich das Thema noch als offen.
Geändert von shockshell (24.06.08 um 23:34 Uhr)
Nichts hält so lange wie ein Provisorium....
-
PHP-Code:
function parseDateByFormat($date, $format)
{
$timestamp = null;
$formatPatterns = array(
'a' => '(?P<a>am|pm)',
'A' => '(?P<A>AM|PM)',
'B' => '(?P<B>[0-9]{3})',
// 'c' => '(?P<c>)',
'd' => '(?P<d>[1-9]|[12][0-9]|3[01])',
'D' => '(?P<D>Mon|Tue|Wed|Thu|Fri|Sat|Sun)',
'F' => '(?P<F>January|February|March|April|May|June|July|August|September|October|November|December)',
'g' => '(?P<g>[1-9]|1[0-2])',
'G' => '(?P<G>[0-9]|1[0-9]|2[0-3])',
'h' => '(?P<h>0[1-9]|1[0-2])',
'H' => '(?P<H>[01][0-9]|2[0-3])',
'i' => '(?P<i>[0-4][0-9]|5[0-9])',
'I' => '(?P<I>[01])',
'j' => '(?P<j>[1-9]|[12][0-9]|3[01])',
'l' => '(?P<l>Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)',
'L' => '(?P<L>[01])',
'm' => '(?P<m>0[1-9]|1[0-2])',
'M' => '(?P<M>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)',
'n' => '(?P<n>[1-9]|1[0-2])',
'O' => '(?P<O>[+\-][0-9]{4})',
// 'r' => '(?P<r>)',
's' => '(?P<s>[0-4][0-9]|5[0-9])',
'S' => '(?P<S>st|nd|rd|th)',
't' => '(?P<t>28|29|30|31)',
'T' => '(?P<T>[A-Z]{3})',
'U' => '(?P<U>[1-9][0-9]*)',
'w' => '(?P<w>[0-6])',
'W' => '(?P<W>[1-9]|[1-4][0-9]|5[0-3])',
'Y' => '(?P<Y>[0-9]{4})',
'y' => '(?P<y>[0-9]{2})',
'z' => '(?P<z>[0-9]|[12][0-9][0-9]|3(?:[0-5][0-9]|6[0-5]))',
'Z' => '(?P<Z>-?(?:[0-9]|[1-9][0-9]{3}|[1-3][0-9]{4}|4(?:[0-2][0-9]{3}|3[01][0-9]{2}|3200)))',
);
$regexp = preg_replace('/[a-zA-Z]/e', 'isset($formatPatterns["$0"])?$formatPatterns["$0"]:"$0"', $format);
if (preg_match('/^'.$regexp.'$/', trim($date), $match)) {
$values = array(0, 0, 0, 0, 0, 0, 0);
foreach ($match as $format => $value) {
if ($format == 'g' || $format == 'G' || $format == 'h' || $format == 'H') {
$values[0] = $value;
} else if ($format == 'i') {
$values[1] = $value;
} else if ($format == 's') {
$values[2] = $value;
} else if ($format == 'm' || $format == 'n') {
$values[3] = $value;
} else if ($format == 'd' || $format == 'j') {
$values[4] = $value;
} else if ($format == 'Y' || $format == 'y') {
$values[5] = $value;
}
}
$timestamp = mktime($values[0], $values[1], $values[2], $values[3], $values[4], $values[5]);
}
return $timestamp;
}
var_dump(parseDateByFormat('2008-06-14 17:43:02', 'Y-m-d H:i:s'));
Markus Wulftange
-
25.06.08 09:48 #9
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Super! Passt (fast)
Musst beim kleinen d noch eine null am Anfang einfügen
Danke.PHP-Code:(?P<d>[1-9]|[12][0-9]|3[01]) => (?P<d>0[1-9]|[12][0-9]|3[01])
Nichts hält so lange wie ein Provisorium....
-
05.02.10 19:20 #10mitopp Tutorials.de Gastzugang
Hallo zusammen,
ich hoffe jemand antwortet auf dieses doch schon etwas ältere Thema. Eventuell vllt auch Gumbo.
Die Funktion ist super, aber verursacht einen Fehler bei diesem Format: parseDateByFormat('March 10, 2001, 5:16 pm', 'F j, Y, g:i a')
Könnt ihr mir helfen?
-
05.02.10 19:31 #11
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Wie lautet denn die Meldung?
Nichts hält so lange wie ein Provisorium....
-
05.02.10 19:37 #12mitopp Tutorials.de Gastzugang
Keine Fehlermeldung. Nur der Timestamp ist falsch.
Der Response ist: Timestamp: 976421760 || Formatiert: 10.12.2000 05:16:00 date("d.m.Y H:i:s", Timestamp)
-
05.02.10 20:02 #13
- Registriert seit
- Jun 2005
- Ort
- Buxtehude (Niedersachsen)
- Beiträge
- 256
Hiermit gehts:
'F' war in der Schleife nicht abgearbeitet. Gilt auch für andere.PHP-Code:function parseDateByFormat($date, $format)
{
$timestamp = null;
$formatPatterns = array(
'a' => '(?P<a>am|pm)',
'A' => '(?P<A>AM|PM)',
'B' => '(?P<B>[0-9]{3})',
// 'c' => '(?P<c>)',
'd' => '(?P<d>[1-9]|[12][0-9]|3[01])',
'D' => '(?P<D>Mon|Tue|Wed|Thu|Fri|Sat|Sun)',
'F' => '(?P<F>January|February|March|April|May|June|July|August|September|October|November|December)',
'g' => '(?P<g>[1-9]|1[0-2])',
'G' => '(?P<G>[0-9]|1[0-9]|2[0-3])',
'h' => '(?P<h>0[1-9]|1[0-2])',
'H' => '(?P<H>[01][0-9]|2[0-3])',
'i' => '(?P<i>[0-4][0-9]|5[0-9])',
'I' => '(?P<I>[01])',
'j' => '(?P<j>[1-9]|[12][0-9]|3[01])',
'l' => '(?P<l>Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)',
'L' => '(?P<L>[01])',
'm' => '(?P<m>0[1-9]|1[0-2])',
'M' => '(?P<M>Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)',
'n' => '(?P<n>[1-9]|1[0-2])',
'O' => '(?P<O>[+\-][0-9]{4})',
// 'r' => '(?P<r>)',
's' => '(?P<s>[0-4][0-9]|5[0-9])',
'S' => '(?P<S>st|nd|rd|th)',
't' => '(?P<t>28|29|30|31)',
'T' => '(?P<T>[A-Z]{3})',
'U' => '(?P<U>[1-9][0-9]*)',
'w' => '(?P<w>[0-6])',
'W' => '(?P<W>[1-9]|[1-4][0-9]|5[0-3])',
'Y' => '(?P<Y>[0-9]{4})',
'y' => '(?P<y>[0-9]{2})',
'z' => '(?P<z>[0-9]|[12][0-9][0-9]|3(?:[0-5][0-9]|6[0-5]))',
'Z' => '(?P<Z>-?(?:[0-9]|[1-9][0-9]{3}|[1-3][0-9]{4}|4(?:[0-2][0-9]{3}|3[01][0-9]{2}|3200)))',
);
$regexp = preg_replace('/[a-zA-Z]/e', 'isset($formatPatterns["$0"])?$formatPatterns["$0"]:"$0"', $format);
if (preg_match('/^'.$regexp.'$/', trim($date), $match)) {
$values = array(0, 0, 0, 0, 0, 0, 0);
foreach ($match as $format => $value) {
if ($format == 'g' || $format == 'G' || $format == 'h' || $format == 'H') {
$values[0] = $value;
} else if ($format == 'i') {
$values[1] = $value;
} else if ($format == 's') {
$values[2] = $value;
} else if ($format == 'm' || $format == 'n') {
$values[3] = $value;
} else if ($format == 'd' || $format == 'j') {
$values[4] = $value;
} else if ($format == 'Y' || $format == 'y') {
$values[5] = $value;
}else if($format=='F'){
switch($value){
case 'January':
$values[3]=1;
break;
case 'February':
$values[3]=2;
break;
case 'March':
$values[3]=3;
break;
case 'April':
$values[3]=4;
break;
case 'May':
$values[3]=5;
break;
case 'June':
$values[3]=6;
break;
case 'July':
$values[3]=7;
break;
case 'August':
$values[3]=8;
break;
case 'September':
$values[3]=9;
break;
case 'October':
$values[3]=10;
break;
case 'November':
$values[3]=11;
break;
case 'December':
$values[3]=12;
break;
}
}
}
$timestamp = mktime($values[0], $values[1], $values[2], $values[3], $values[4], $values[5]);
}
return $timestamp;
}
$time=parseDateByFormat('March 10, 2001, 5:16 pm', 'F j, Y, g:i a');
echo date('d.m.Y H:i:s',$time);
Das mit der switch case kann man mit den Array auch etwas "hübscher" lösen.
Gruß
ShockshellNichts hält so lange wie ein Provisorium....
-
05.02.10 21:09 #14mitopp Tutorials.de Gastzugang
Ah ok. Ist mir nicht aufgefallen, dass in der Schleife was fehlt. Danke. Ich teste es morgen mal mit "hübscherem" Array.
-
06.02.10 09:42 #15mitopp Tutorials.de Gastzugang
Hallo shockshell,
es funktioniert hervorragend. Danke.
Ich habe auch AM|PM abgefangen. Aber ich weiß nicht, wie ich die noch fehlenden Elemente in der Schleife verarbeiten kann.
Kannst du mir noch einmal helfen?
Ähnliche Themen
-
Datum in Timestamp umwandeln
Von Kussilein im Forum PHPAntworten: 7Letzter Beitrag: 04.09.09, 18:29 -
Datum in timestamp() umwandeln
Von wildstar im Forum PHPAntworten: 2Letzter Beitrag: 28.02.06, 12:54 -
Timestamp nach heutigen Datum, aber beliebiges Jahr, abfragen
Von MM2410 im Forum Relationale DatenbanksystemeAntworten: 5Letzter Beitrag: 23.11.05, 17:39 -
Timestamp in Datum umwandeln?
Von moistwanted im Forum PHPAntworten: 6Letzter Beitrag: 23.03.05, 10:43 -
Datum in timestamp umwandeln
Von CamCara im Forum PHPAntworten: 1Letzter Beitrag: 13.07.04, 01:14





Zitieren
Login






[PHP] [Codeschnipsel] ImageColor aus HTML-Farbcodierung erstellen