[php] MySQL timestamp naar UNIX timestamp

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
Ik probeer een datum die ik uit een database haal, en die dus in MySQL Timestamp formaat is, te vergelijken met de huidige datum in PHP.
Nu heeft php een aantal hele leuke functies die met timestamps werken, maar op de een of andere manier leveren deze een ander formaat timestamp op:

PHP:
1
2
3
4
5
6
7
<?php
$timestamp = time();
echo "PHP Unix timestamp: $timestamp";

$timestamp = $db->get('time');
echo "MySQL timestamp: $timestamp";
?>

Levert dus dingen in een heel ander formaat op:

code:
1
2
PHP Unix timestamp: 1071226467
MySQL timestamp: 20031209011615


De PHP timestamp is dus het aantal seconden vanaf 1 jan 1970, en de MySQL timestamp is gewoon een combinatie van alle datumgegevens aanelkaargeplakt.

de search leverde niet echt veel zinvols op met keywords als "MySQL php timestamp", en ook met google kon ik geen oplossing voor mijn probleem vinden.

Is er een makkelijke manier om te wisselen tussen deze twee formaten, zodat ik ze gewoon als integers kan vergelijken?

[ Voor 5% gewijzigd door dawuss op 12-12-2003 12:11 ]

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Manual werk, hoor, dit ;) Waarom weten mensen niet te bedenken dat MySQL zelf ook nog functies heeft?

UNIX_TIMESTAMP en FROM_UNIXTIME zijn de functies die je zoekt. zie http://www.mysql.com/doc/en/Date_and_time_functions.html

edit:
Waarom staat dit ei'k in W&G :? 8)7

[ Voor 10% gewijzigd door drm op 12-12-2003 12:16 ]

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
drm schreef op 12 december 2003 @ 12:13:
Manual werk, hoor, dit ;) Waarom weten mensen niet te bedenken dat MySQL zelf ook nog functies heeft?

UNIX_TIMESTAMP en FROM_UNIXTIME zijn de functies die je zoekt. zie http://www.mysql.com/doc/en/Date_and_time_functions.html
Hmm, dat zijn wel hele mooie functies, maar eigenlijk los ik dit liever op binnen PHP, gezien de manier waarop ik die timestamp uit de database haal. Zo'n UNIX_TIMESTAMP() zou best mooi werken, maar dan moet er een hele klasse aangepast worden, en da's eigenlijk niet zomaar de bedoeling.
edit:
Waarom staat dit ei'k in W&G :? 8)7
Ja, da's een goeie :o
Mag 'ie naar de buren?

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Mja, als je je queries niet aan wilt passen ben je niet erg flexibel, natuurlijk. Waarom wil je dit perse in PHP doen, dan :?

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
drm schreef op 12 december 2003 @ 12:29:
Mja, als je je queries niet aan wilt passen ben je niet erg flexibel, natuurlijk. Waarom wil je dit perse in PHP doen, dan :?
Het kan wel via het aanpassen van de queries, maar ik verkrijg de timestamp op een andere manier dan in het voorbeeld in de startpost.
De timestamp hoort bij een "Exercise" en die Exercise is een klasse.
PHP:
1
$exercise->getDeadline();
levert dus de deadline op in MySQL timestamp formaat.

Wil ik dat veranderen dan moet ik dus in die klasse gaan timmeren, maar dit is geen 1-persoonsproject, dus dat houd ik liever als 2e optie. Als het met php kan, dan doe ik dat liever op die manier :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • mboy
  • Registratie: December 2001
  • Laatst online: 20-06-2024
Door middel van de mktime functie kun je van een normale datum een unix timestamp maken. Het enige wat je moet doen is je mysql timestamp opdelen in jaar, dag, maand etc.

Acties:
  • 0 Henk 'm!

Verwijderd

Heel makkelijk kan het niet. Wellicht is dit een van de makkelijkere:
PHP:
1
2
3
$date = substr($time,0,4)."-".substr($time,4,2)."-".substr($time,6,2);
$date .= " ".substr($time,8,2).":".substr($time,10,2).":".substr($time,12,2);
$unixdate = strtotime($date);

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Er zijn allerlei verschillende dergelijke oplossingen te bedenken, maar dat valt imo echt in de categorie "plakbandoplossing". Pas gewoon je classes aan dat die getDeadline functie een (unix) timestamp teruggeeft, desnoods door er een argument aan toe te voegen.

PHP:
1
2
3
4
5
6
7
8
9
class ... {
   function getDeadline ( $asUnixTimestamp = false ) {
      if ( $asUnixTimestamp ) {
         return $this->record [ 'unix_timestamp' ];
      } else {
          return date ( 'Ymdhis', $this->record [ 'unix_timestamp' ] );
      }
  }
}
Maar ik zou uberhaupt die mysql timestamp skippen. Ik kan me namelijk niet voorstellen dat je ergens in je PHP code echt handig gebruik maakt van een mysql timestamp, want daar is dat formaat gewoon niet geschikt voor. 't Is puur een wijze van date/time opslaan, verder niet.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

Topicstarter
Na jullie advies heb ik inderdaad maar de klassen aangepast. Nu werkt het allemaal prima :)

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©

Pagina: 1