# Datum und Uhrzeit in Datenbank speichern



## Cusco (4. Januar 2008)

Hi,

ich möchte die aktuelle Uhrzeit eines Eintrages ändern. Es existieren dazu zwei Felder eines soll das Datum und die Zeit der Eintrag-Erstellung und das das zweite Feld ändert sich laufend wenn auf den Eintrag zugegriffen wurde was aber nicht automatisch erfolgen soll. Ich habe heute erst mit Datenbanken angefangen weiß also so gut wie nichts. Im Moment sind die Felder vom Typ INT und enthalten den Timestamp von der Funktion Time(), es funktioniert zwar, aber in der Datenbankansicht ist nicht ersichtlich welches Datum es ist. Das möchte ich ändern.

Also wie schreibt man den Timestamp der Funktion Time in die Datenbank, welchen Variablentyp muss ich nutzen damit auch in der Datenbankansicht eine vernüftige Zeitangebe angezeigt wird und nicht nur die Nummer vom Timestamp. Für die Verwaltung muß aber wieder der normale Timestamp zurückgegeben werden.


----------



## MonGol1992 (4. Januar 2008)

INT(10), sprich INTeger mit 10 Zeichen (eig ja Ziffern)
Im phpMyAdmin siehste dann trotzdem nur die Ziffern und kein Datum á la 27.12.1992 21:58!

Wenn du den Timestamp wieder in ein "lesbares" Datum umwandeln willst, nutze date():

```
date("d.m.Y H:i", $timestamp);
```

MfG,
Marcel

PS: Du kannst auch die Datumsfunktion von MySQL nutzen. Damit kenne ich mich aber nicht so genau aus, da ich die Methode mit dem UNIX-Timestamp bevorzuge. Kannst ja mal in der MySQL Dokumentation nachschlagen


----------



## Gumbo (4. Januar 2008)

Verwende am besten die internen Datums- und Zeittypen.


----------



## nosilume (4. Januar 2008)

Am besten ist, du verwendest einen SQL Timestamp (Feldtyp ist glaube ich _TIMESTAMP_). Damit kannst du in SQL rechnen, und umwandeln für das Script in einen UNIX Timestamp geht während des SELECTs mit der Funktion _UNIX_TIMESTAMP()_.


----------



## Cusco (5. Januar 2008)

Gumbo hat gesagt.:


> Verwende am besten die internen Datums- und Zeittypen.



Also werde ich wohl den Variablentyp DATETIME nutzen müssen. Mit welcher Funktion ermittle man die Zeitangabe für DATETIME und wie kann danach DATETIME in das UNIX-TIMSTAMP umgewandelt werden?


----------



## Cusco (5. Januar 2008)

Hallo,

aktuell habe ich DATETIME gewählt dessen Zeit ich so zum speichern ermittle


```
function zeit()
{
   return date("Y-m-d H:i:s");
}
```

Jetzt versuche ich das Format in Timestamp zu wandeln


```
$ssdatum = mktime(substr($dsatz["datum"],8,2),
      substr($dsatz["datum"],10,2),
      substr($dsatz["datum"],12,2),
      substr($dsatz["datum"],4,2),
      substr($dsatz["datum"],6,2),
      substr($dsatz["datum"],0,4));
```

Nur leider tritt ein Fehler auf, so wird statt dem 05.01.2008 der 01.12.2007 zurück gegeben. Wo liegt der Fehler?


----------



## Cusco (5. Januar 2008)

Die zahlen der vorherigen umwamndlungsroutiene waren total verdreht 

Ich habe sie umgeschrieben und nun funktioniert sie anscheint:


```
function datetime_zu_timestamp($dt)
{
  $jahr    = (int) substr($dt,0,4);
  $monat   = (int) substr($dt,5,2);
  $tag     = (int) substr($dt,8,2);
  $stunde  = (int) substr($dt,11,2);
  $minute  = (int) substr($dt,14,2);
  $sekunde = (int) substr($dt,17,2);
  return mktime($stunde, $minute, $sekunde, $monat, $tag, $jahr);
}
```


----------



## Gumbo (5. Januar 2008)

Du kannst auch wie bereits erwähnt die MySQL-Funktion UNIX_TIMESTAMP() oder die PHP-Funktion strtotime() nutzen.


----------



## Cusco (6. Januar 2008)

Gumbo hat gesagt.:


> Du kannst auch wie bereits erwähnt die MySQL-Funktion UNIX_TIMESTAMP() oder die PHP-Funktion strtotime() nutzen.



Habe ich versucht, aber dann kommt die Meldung das die funktion nicht existiert  Ich bin bei T-Online und der Server hat anscheint einige macken die nach und nach dank meinen Berichterstattungen bereinigt werden. Der erste und der Schlimmste Fehler war z.B. das Dateien beim schreiben nicht kürzer werden konnten und sich damit restmüll am Dateiende befand.


----------



## Gumbo (6. Januar 2008)

Ich hoffe du hast beachtet, dass UNIX_TIMESTAMP() eine MySQL-Funktion und nur strtotime() eine PHP-Funktion ist.


----------



## Cusco (6. Januar 2008)

Gumbo hat gesagt.:


> Ich hoffe du hast beachtet, dass UNIX_TIMESTAMP() eine MySQL-Funktion und nur strtotime() eine PHP-Funktion ist.



Was ist der Unterschied? (Ich befasse mich erst seit vorgestern mit SQL, kann aber schon ein persönliches Counterskript vorweisen, welches für jede Einzelseite der Page einen Counter einrichtet)


----------



## nosilume (7. Januar 2008)

PHP Funktionen sind Funktionen in PHP selbst also zb 
	
	
	



```
time();
```
 SQL Funktionen verwendest du im Query selbst: 
	
	
	



```
mysql_query("SELECT MD5('foobar')");
```


----------



## Cusco (8. Januar 2008)

nosilume hat gesagt.:


> PHP Funktionen sind Funktionen in PHP selbst also zb
> 
> 
> 
> ...



Ok kappiert, werde in Zukunft daran denken (müßen)


----------



## Gumbo (8. Januar 2008)

MySQL-Funktionen (so wie alle anderen SQL-Schlüsselwörter) werden meist in Großbuchstaben geschrieben, PHP-Funktionen (und -Schlüsselwörter) dagegen in Kleinbuchstaben.

Wenn also jemand etwas von einer NOW()- oder time()-Funktion schreibt, solltest du wissen, welche zu welcher Sprache gehört. Notfalls schaust du eben in den Handbüchern (von PHP/von MySQL) nach.


----------

