Entwickler-Ecke

Programmiersprachen (Server) - Unix-Timestamp (der aus MySQL) in Form von Time() umrechnen?


Wolle92 - Mi 23.01.08 15:32
Titel: Unix-Timestamp (der aus MySQL) in Form von Time() umrechnen?
Hallo,
ich möchte zwei Zeiten in PHP vergleichen, die eine davon wird aus einer MySQL-Datenbank gelesen...
In der Form YYYY-MM-TT HH:MM:SS...
Die andere ist die aktuelle Zeit, als Ergebnis der Funktion Time()...
Um dann damit rechnen zu können, will ich jetzt alles auf das Time()-Ergebnis-Fomat bringen...
Wie mache ich das?

Wolle


GTA-Place - Mi 23.01.08 15:52


Quelltext
1:
2:
3:
$sql = mysql_query("SELECT UNIX_TIMESTAMP(dateCol) AS TimeStamp FROM dateTable");
$result = mysql_fetch_assoc($sql);
$timestamp = $result['TimeStamp'];


Wolle92 - Mi 23.01.08 15:55

Aber die Time-Funktion liefert ja keinen Unix-Timestamp zurück...
sonder sowas:
1201096462
nen Unix-Timestamp ist doch IMHO 20080123145416, oder?


GTA-Place - Mi 23.01.08 22:07

Nein. Ein Unix-Timestamp - time() gibt so einen aus - gibt die Sekunden seit dem 01.01.1970 an. Und das ist das was du möchtest ;-)


Christian V. - Do 24.01.08 00:16

user profile iconGTA-Place hat folgendes geschrieben:
Nein. Ein Unix-Timestamp - time() gibt so einen aus - gibt die Sekunden seit dem 01.01.1970 an. Und das ist das was du möchtest ;-)

Was er möchte....
Wohl eher, wonach er gefragt hat ;)

Nun, das was du willst kannst du folgendermassen erreichen:
Du löschst einfach mittels RegEx alles raus, was keine zahlen sind. ;) Also einfach mit \D matchen, und mit '' ersetzen.


DarkHunter - Do 24.01.08 00:28

Wenn das Format immer YYYY-MM-TT HH:MM:SS ist, dann kannst du über einen Regex und die Funktion mktime() einen Timestamp draus machen.
Regex: (\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)

in php würde das ganze so aussehen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
$data = <daten aus der mysql-datenbank>;
$regex = "/(\d\d\d\d)-(\d\d)-(\d\d) (\d\d):(\d\d):(\d\d)/i";
$date = array();
if (preg_match($regex,$data,$date)){
  $year = $date[1];
  $month = $date[2];
  $day = $date[3];
  $hour = $date[4];
  $min = $date[5];
  $sec = $date[6];
  $timestamp = mktime($hour,$min,$sec,$month,$day,$year);
}


Anmerkung: Code ist nicht getestet, sondern soll nur als Hinweis dienen.


GTA-Place - Do 24.01.08 07:40

Das ist doch Blödsinn. Wozu gibt des denn die Funktion UNIX_TIMESTAMP von MySQL?


Wolle92 - Do 24.01.08 16:09

Leute, GTA hat recht...
Muss man einfach mal in PHPMyAdmin eingeben...

Quelltext
1:
SELECT UNIX_TIMESTAMP(time) FROM table                    

Kommt genau so eine zehnstellige Zahl raus wie bei der Time()-Funktion...

Leider weiß ich jetzt nicht mehr, wofür ich das brauchte...


Christian V. - Sa 26.01.08 19:09

user profile iconWolle92 hat folgendes geschrieben:
Aber die Time-Funktion liefert ja keinen Unix-Timestamp zurück...
sonder sowas:
1201096462
nen Unix-Timestamp ist doch IMHO 20080123145416, oder?

Was möchstest du den nun? Den Unix Timestamp, oder das von dir beschriebene Format?

GTA's Lösung ist für den Unix Timestamp gedacht. Dein Problem, etwas wie 20080126180120 ausgeben, löst es nicht!

Wie gesagt, einfach die preg_replace Funktion benutzen.

C#-Quelltext
1:
2:
3:
4:
<?PHP
  $time = '2008-01-26 18:02:21';
  $result = preg_replace('~\D~''', $time);
?>


Wolle92 - So 27.01.08 10:23

hab doch schon gesagt, das GTAs Antwort richtig ist...


GTA-Place - So 27.01.08 10:52

user profile iconChristian V. hat folgendes geschrieben:
Was möchstest du den nun? Den Unix Timestamp, oder das von dir beschriebene Format?

user profile iconWolle92 hat folgendes geschrieben:
Um dann damit rechnen zu können, will ich jetzt alles auf das Time()-Ergebnis-Fomat bringen...


;-)