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

  • 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 ...
    Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.


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

    Kommentar


    • #3
      Das erklärts natürlich ...
      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

      Kommentar


      • #4
        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().

        Kommentar


        • #5
          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.
          Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

          Kommentar


          • #6
            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

            Kommentar


            • #7
              die wandelt doch nur ins UNIX Format ?
              Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

              Kommentar


              • #8
                Ich denke er meinte in Kombination mit date() oder strftime().

                Kommentar


                • #9
                  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?
                  Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                  Kommentar


                  • #10
                    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.

                    Kommentar


                    • #11
                      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.
                      Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                      Kommentar


                      • #12
                        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
                        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

                        Kommentar

                        Lädt...
                        X