Ankündigung

Einklappen
Keine Ankündigung bisher.

Pear: Timestamp wird nicht in DB geschrieben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • HStev
    hat ein Thema erstellt Pear: Timestamp wird nicht in DB geschrieben.

    Pear: Timestamp wird nicht in DB geschrieben

    Servus,

    ich hab folgende Tabelle:

    Code:
    CREATE TABLE `kp_activations` (
      `user_id` int(11) NOT NULL default '0',
      `acctivationstring` varchar(32) collate latin1_general_ci NOT NULL default '',
      `verfallsdatum` timestamp NULL default NULL,
      PRIMARY KEY  (`user_id`,`acctivationstring`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
    und möchte per PEAR Daten in die Tabelle eintragen:

    Code:
    $table_name = DBPREFIX.'activations';
    			
    $vdate = strtotime("+1 day");
    		
    $fields_values = array(
    	'user_id'   	=> $UID,
    	'acctivationstring'    	=> $RNDSTRING->RNDString,
    	'verfallsdatum'		=> $vdate
    	);
    			
    $res = $DB->autoExecute($table_name, $fields_values, DB_AUTOQUERY_INSERT);
    Das funktioniert auch soweit der Datensatz wird angelegt allerdings wird der Timestamp nicht gespeichert ...

  • HStev
    antwortet
    So wenn es wem interesiert ich hab hier ne kleine Klasse die das Datumshandling etwas vereinfacht.

    Die Klasse enthält noch eingie Schönheitsfehler zb. wird der Typ der übergebenen Value nicht bei allen Eigenschaften überprüft.

    PHP-Code:
    <?php
    class DATUM 
    {
        protected 
    $_timestamp             NULL;
        
        protected 
    $_format                = array(
                                            
    "date"            => "d.m.Y",
                                            
    "time"            => "H:i:s",
                                            
    "mysql"            => "YmdHis"
                                            
    );
                                            
        protected 
    $_dateInfo            NULL;
        
        public function 
    __construct($datum NULL)    
        {
            if (
    $datum == NULL)
            {
                
    $this->_timestamp time();    
            }
            
            if (
    is_int($datum))
            {
                
    $this->_timestamp $datum;
            }
            
            if (
    is_string($datum))
            {
                
    $tsp = @strtotime($datum);
                if (!
    $tsp)
                    throw new 
    DATUMUnknownDateFormat();
                    
                
    $this->_timestamp $tsp;
            }
            
            
    $this->_dateInfo getdate($this->_timestamp);
            
        }
        
        public function 
    __set($property$value)
        {
            switch (
    $property)
            {
                case 
    'date':
                    
    $this->__construct($value);
                    break;
                case 
    'time':
                    
    $this->__construct($value);
                    break;
                case 
    'timestamp':
                    if(!
    is_int($value))
                        throw new 
    DATUMIncorrectVarType();
                    
    $this->_timestamp $value;
                    break;
                case 
    'dateformat':
                    if(!
    is_string($value))
                        throw new 
    DATUMIncorrectVarType();
                    
    $this->_format['date'] = $value;
                    break;
                case 
    'timeformat':
                    if(!
    is_string($value))
                        throw new 
    DATUMIncorrectVarType();    
                    
    $this->_format['time'] = $value;
                    break;
                case 
    'seconds':
                    
    $this->_dateInfo[$property] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'minutes':
                    
    $this->_dateInfo[$property] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'hours':
                    
    $this->_dateInfo[$property] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'day':
                    
    $this->_dateInfo['mday'] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'month':
                    
    $this->_dateInfo['mon'] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'year':
                    
    $this->_dateInfo[$property] = $value;
                    
    $this->_genNewDateFromArray();
                    break;
                case 
    'mysql_timestamp':
                    
    $this->__construct($value);
                    break;
                default:
                    throw new 
    DATUMUnknownProperty();
            }
        }
        
        public function 
    diff($formatDATUM $ddate)
        {
            
    // Kommt noch        
        
    }
        
        public function 
    __get($property)
        {
            switch (
    $property)
            {
                case 
    'dayofyear':
                    return 
    $this->_dateInfo['yday'];
                case 
    'weekday':
                    return 
    date('w'$this->_timestamp);
                    break;
                case 
    'weekdayname':
                    return 
    $this->_dateInfo['weekday'];
                    break;
                case 
    'week':
                    return 
    date('W'$this->_timestamp);
                    break;
                case 
    'date':
                    return 
    date($this->_format['date'], $this->_timestamp);
                    break;
                case 
    'time':
                    return 
    date($this->_format['time'], $this->_timestamp);
                    break;
                case 
    'dateformat':
                    return 
    $this->_format['date'];
                    break;
                case 
    'timeformat':    
                    return 
    $this->_format['time'];
                    break;
                case 
    'timestamp':
                    return 
    $this->_timestamp;
                    break;
                case 
    'seconds':
                    return 
    $this->_dateInfo[$property];
                    break;
                case 
    'minutes':
                    return 
    $this->_dateInfo[$property];
                    break;
                case 
    'hours':
                    return 
    $this->_dateInfo[$property];
                    break;
                case 
    'day':
                    return 
    $this->_dateInfo['mdays'];
                    break;
                case 
    'month':
                    return 
    $this->_dateInfo['mon'];
                    break;
                case 
    'monthname':
                    return 
    $this->_dateInfo['month'];
                    break;
                case 
    'year':
                    return 
    $this->_dateInfo[$property];
                    break;
                case 
    'mysql_timestamp':
                    return 
    date($this->_format['mysql'], $this->_timestamp);
                    break;
                default:
                    throw new 
    DATUMUnknownProperty();
            }    
        }
        
        public function 
    __toString()
        {
            return 
    date($this->_format['date']." ".$this->_format['time'], $this->_timestamp);
        }
        
        protected function 
    _genNewDateFromArray()
        {
            
    $this->_timestamp mktime($this->_dateInfo['hours'], $this->_dateInfo['minutes'], $this->_dateInfo['seconds'], $this->_dateInfo['mon'], $this->_dateInfo['mday'], $this->_dateInfo['year']);    
        }
    }

    class 
    DATUMIncorrectVarType     extends Exception {}
    class 
    DATUMUnknownDateFormat     extends Exception {}
    class 
    DATUMUnknownProperty        extends Exception {}
    ?>
    Beispiel:
    PHP-Code:
    <?php
    $D 
    = new DATUM();
    echo 
    $D;
    echo 
    "
    "
    ;
    echo 
    $D->date;
    echo 
    "
    "
    ;
    echo 
    $D->time;
    echo 
    "
    "
    ;
    echo 
    "Woche: ".$D->week."(".$D->weekday.") -> Tag Nr.: ".$D->dayofyear;
    echo 
    "
    "
    ;
    echo 
    $D->weekdayname;
    echo 
    "
    "
    ;
    echo 
    $D->monthname;
    echo 
    "
    "
    ;
    echo 
    $D->mysql_timestamp;
    echo 
    "
    "
    ;
    $D->day 30;
    echo 
    $D;
    ?>
    Ausgabe:
    29.11.2005 19:00:00
    29.11.2005
    19:00:00
    Woche: 48(2) -> Tag Nr.: 332
    Tuesday
    November
    20051129190000
    30.11.2005 19:00:00

    Einen Kommentar schreiben:


  • HStev
    antwortet
    hmmm der MySQL Timestamp hat immer eine einheitliche Länge und bestimmte Bereiche die nur bestimmte Ziffern enthalten dürfen aber eine reine Garantie dafür das richtig gematcht wird bei RegEx ist es nicht obwohl die wahrscheinlich das richtige zu matchen sehr hoch sein dürfte.

    Hmm hat sich schon erledigt MySQL wandelt das von allein um merk ich grad.

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Also ein MySQL-Timestamp hat das Format YYYYMMDDHHIISS, laut xabbuh seit MySQL 4.1 ist das TIMESTAMP-Format gleich dem DATETIME-Format, welches sich so aufbaut: YYYY-MM-DD HH:II:SS (also mit Trennzeichen, menschliche Erkennung somit einfacher). Ein Unix-Timestamp stellt die Sekunden seit dem 01.01.1970 dar (ich glaube seit 1 Uhr nachts). Das sind dann momentan also grob 36 * 365 * 24 * 60 * 60 = 1135296000.

    Somit schlägt ein strtotime(time()) wohl fehl, bzw. ist gleich 0. Ein strtotime('yyyymmddhhiiss') oder strtotime('yyyy-mm-dd hh:ii:ss') funktioniert allerdings korrekt.

    Einen Kommentar schreiben:


  • HStev
    antwortet
    Was ist denn der wesentliche Unterschied zwischen beiden Timestamps?
    Gibts ne Möglichkeit zu unterscheiden welcher übergeben wurde?

    Der MySQL Timestamps setzt sich wie ich sehe aus
    JAHR MONAT TAG STUNDE MINUTE
    zusammen. Das liese sich ja mit RegEx rausfiltern und erstellen lässt sich der auch ganz einfach.

    Nur ein UNIX Timestamp kann doch genauso in das Pattern fallen oder irre ich mich da jetzt gewaltig?

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    Ich denke er meinte in Kombination mit date() oder strftime().

    Einen Kommentar schreiben:


  • HStev
    antwortet
    die wandelt doch nur ins UNIX Format ?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Schau dir auch mal die Funktion strtotime an.
    Mit der kann man gut "MYSQL-Timestamps" umwandeln in normale.

    http://de3.php.net/manual/de/function.strtotime.php

    Einen Kommentar schreiben:


  • HStev
    antwortet
    Ich habs jetzt über Datetime gelöst das scheint mir vom Handling etwas leichter zu sein.
    Mal schauen vielleicht schreib die Tage ne Klasse die ganze Handling mit Datem noch etwas vereinfacht.

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    Noch eine kleine Ergänzung: Seit MySQL 4.1 hat sich das Format geändert, in dem Timestamps gespeichert werden. Dieses ist nun identisch mit dem DATETIME-Format.
    Zum Umrechnen zwischen UNIX-Timestamp und DATETIME / TIMESTAMP in MySQL gibt es die Funktionen UNIX_TIMESTAMP() und FROM_UNIXTIME().

    Einen Kommentar schreiben:


  • HStev
    antwortet
    Das erklärts natürlich ...

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    TIMESTAMP ist in MySQL glaube ich im Format 200511281524 anstatt des Unix-Timestamps, wie du ihn übergibst.

    Einen Kommentar schreiben:

Lädt...
X