Zurück tutorials.de > Programming > PHP

 
 
Hallo und herzlich willkommen! Tutorials.de ist eine Hilfe-Community mit dem Motto User helfen Usern. Als Gast verfügst Du über Schreibrechte in unseren Foren und Blogs. Du kannst dich aber gerne auch kostenlos registrieren und Teil unserer Gemeinschaft werden! Viel Spaß & Erfolg bei der Vermehrung deines Wissens :-)

Themen: 242.975 | Beiträge: 1.352.293 | Mitglieder: 169.418 (Stand 28.01.10) | Fragen zur Nutzung von Tutorials.de? Nutzungsregeln | Kontaktformular | Impressum
 
 
tutorials.de Buch-Verschenkaktion

  AntwortAntworten (über Gastzugang)    
  AntwortAntworten (über Gastzugang)    
 
LinkBack Themen-Optionen Ansicht
Alt 24.06.08, 18:43   #1 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

Beliebiges Datum per Format in Timestamp umwandeln

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ß,

Shockshell
__________________
Nichts hält so lange wie ein Provisorium....

Geändert von shockshell (24.06.08 um 18:46 Uhr).
  shockshell ist offline  
 
Alt 24.06.08, 18:52   #2 (permalink)
 
Registriert seit: Feb 2005
Ort: NRW
Beiträge: 460
Renommee-Modifikator: 12
RS9999 hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

Findest Du hier!
  RS9999 ist offline  
 
Alt 24.06.08, 19:03   #3 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

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.
__________________
Nichts hält so lange wie ein Provisorium....

Geändert von shockshell (24.06.08 um 19:08 Uhr).
  shockshell ist offline  
 
Alt 24.06.08, 22:42   #4 (permalink)
Mitglied Gold
 
Benutzerbild von nepda  
 
Registriert seit: Mar 2007
Ort: bei Freiburg
Beiträge: 132
Renommee-Modifikator: 6
nepda befindet sich auf einem aufstrebenden Ast

AW: beliebiges Datum per Format in Timestamp umwandeln

Wie wäre es denn mit der (fast) so genannten Funktion strtotime()?
__________________
Gute Beiträge bitte bewerten und beendete Themen als "Erledigt" markieren.
nepdas aka Nepomuks Internetseite
Projekt "futureunity.com"
alle Seiten/Projekte von mir
  nepda ist offline  
 
Alt 24.06.08, 22:47   #5 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

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ß,

Shockshell
__________________
Nichts hält so lange wie ein Provisorium....
  shockshell ist offline  
 
Alt 24.06.08, 23:09   #6 (permalink)
Mitglied Gold
 
Benutzerbild von nepda  
 
Registriert seit: Mar 2007
Ort: bei Freiburg
Beiträge: 132
Renommee-Modifikator: 6
nepda befindet sich auf einem aufstrebenden Ast

AW: beliebiges Datum per Format in Timestamp umwandeln

Dann wirst du wohl an regulären Ausdrücken kaum vorbeikommen.
__________________
Gute Beiträge bitte bewerten und beendete Themen als "Erledigt" markieren.
nepdas aka Nepomuks Internetseite
Projekt "futureunity.com"
alle Seiten/Projekte von mir
  nepda ist offline  
 
Alt 24.06.08, 23:11   #7 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

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.
__________________
Nichts hält so lange wie ein Provisorium....

Geändert von shockshell (24.06.08 um 23:34 Uhr).
  shockshell ist offline  
 
Alt 25.06.08, 00:26   #8 (permalink)
 
Benutzerbild von Gumbo tutorials.de Moderator 
 
Registriert seit: Dec 2002
Ort: Trier
Beiträge: 17.516
Renommee-Modifikator: 96
Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen Gumbo genießt hohes Ansehen

AW: beliebiges Datum per Format in Timestamp umwandeln

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(0000000);
        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
  Gumbo ist offline  
 
Alt 25.06.08, 09:48   #9 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

Super! Passt (fast)
Musst beim kleinen d noch eine null am Anfang einfügen
PHP-Code:
(?P<d>[1-9]|[12][0-9]|3[01])  => (?P<d>0[1-9]|[12][0-9]|3[01]) 
Danke.
__________________
Nichts hält so lange wie ein Provisorium....
  shockshell ist offline  
 
Alt 05.02.10, 19:20   #10 (permalink)
mitopp
Tutorials.de Gastzugang
 
Beiträge: n/a
AW: beliebiges Datum per Format in Timestamp umwandeln

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?
   
 
Alt 05.02.10, 19:31   #11 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

Wie lautet denn die Meldung?
__________________
Nichts hält so lange wie ein Provisorium....
  shockshell ist offline  
 
Alt 05.02.10, 19:37   #12 (permalink)
mitopp
Tutorials.de Gastzugang
 
Beiträge: n/a
AW: beliebiges Datum per Format in Timestamp umwandeln

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)
   
 
Alt 05.02.10, 20:02   #13 (permalink)
Mitglied Brokat
 
Registriert seit: Jun 2005
Ort: Buxtehude (Niedersachsen)
Beiträge: 255
Renommee-Modifikator: 11
shockshell hat eine blütenweiße Weste

AW: beliebiges Datum per Format in Timestamp umwandeln

Hiermit gehts:

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(0000000);
        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); 
'F' war in der Schleife nicht abgearbeitet. Gilt auch für andere.
Das mit der switch case kann man mit den Array auch etwas "hübscher" lösen.
Gruß

Shockshell
__________________
Nichts hält so lange wie ein Provisorium....
  shockshell ist offline  
 
Alt 05.02.10, 21:09   #14 (permalink)
mitopp
Tutorials.de Gastzugang
 
Beiträge: n/a
AW: Beliebiges Datum per Format in Timestamp umwandeln

Ah ok. Ist mir nicht aufgefallen, dass in der Schleife was fehlt. Danke. Ich teste es morgen mal mit "hübscherem" Array.
   
 
Alt 06.02.10, 09:42   #15 (permalink)
mitopp
Tutorials.de Gastzugang
 
Beiträge: n/a
AW: Beliebiges Datum per Format in Timestamp umwandeln

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?
   
 
 
 
Lesezeichen:


Themen-Optionen
Ansicht
Ähnliche Themen
 
Thema Autor Forum Antworten Letzter Beitrag
Datum in Timestamp umwandeln Kussilein PHP 7 04.09.09 18:29
Datum in timestamp() umwandeln wildstar PHP 2 28.02.06 12:54
Timestamp nach heutigen Datum, aber beliebiges Jahr, abfragen MM2410 Relationale Datenbanksysteme 5 23.11.05 17:39
Timestamp in Datum umwandeln? moistwanted PHP 6 23.03.05 10:43
Datum in timestamp umwandeln CamCara PHP 1 13.07.04 01:14
» Tools
 
tutorials.de-Tools tutorial.de-Suchfeld tutorial.de-Widget tutorial.de-RSS-Feed tutorial.de-Banner
» Neue Links
 
Hits: 101
»
JHT's Planetary...
(Cinema 4D-Objekte)
Hits: 223
»
Tageslicht ohne GI
(Cinema 4D-Tutorials)
Hits: 114
»
Puzzle
(Cinema 4D-Tutorials)
Hits: 83
»
Lacreme
(Cinema 4D-Tutorials)
Hits: 163
»
Liquid Light
(Cinema 4D-Tutorials)
» Aktuelle Umfrage
 
Bist du mit der Geschwindigkeit der Tutorials.de-Website zufrieden?
Ja, es putzt mir glatt den Staub vom Bildschirm! - 75,00%
60 Stimmen
Nein, ich denke da muss noch nachgebessert werden... - 25,00%
20 Stimmen
Stimmen gesamt: 80
Du darfst bei dieser Umfrage nicht abstimmen.

 

Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch) & vBadvanced CMPS v.3.2.0
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.
Alle Rechte vorbehalten ©2000 - 2010 tutorials.de
Design by Mark, CSS by Maik & Sven Mintel
Seite generiert in 0,20534 Sekunden mit 26 queries