[PHP] Timestamp uit MySQL uitlezen en aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
He jongens,

Na jaren enkel statische websites ontworpen te hebben die iemand anders voor me dynamisch maakte, ben ik zelf maar eens met PHP en MySQL aan de slag gegaan. Op zich is het niet zo moeilijk, althans.. het is best logisch.. ik krijg echter 1 ding niet voor elkaar..

In MySQL heb ik een veld aangemaakt met als type 'timestamp', dit auto-update met NOW() en dat is erg handig, omdat ik dit wil gebruiken als indicatie van wanneer een bericht geplaatst is.

Het veldnaam is time_add en met..

code:
1
echo $news->time_add;


..kan ik hem uitlezen. Dit werkt perfect, echter krijg ik dan "2008-02-11 14:34:17".

Ik wil echter graag 11.02.2008 krijgen, en in sommige gevallen 11 februari 2008.

Ik heb vanalles al geprobeerd, mkdate, strtime, maar op een of andere manier krijg ik het niet voor elkaar. Wat doe ik verkeerd en hoe kan ik het goed doen?

Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 21-09 06:21

Strava | AP | IP | AW


Acties:
  • 0 Henk 'm!

  • degroot
  • Registratie: December 2003
  • Niet online
Ben er ook wel benieuwd naar, naar wat eigenljik een goede methode is.


Ik deed nameljik altijd explode op de spatie , en dan explode op de -.
Daarna deed ik die gegevens weer terug stoppen in juiste volgorde in de variable

PHP:
1
2
3
$time[] = explode(" ",$datumfromDb);
$a = explode("-", $time[1]);
$newDate = $a."-".$b."-".$c;

[ Voor 20% gewijzigd door degroot op 12-02-2008 14:38 ]

www.degroot-it.nl


Acties:
  • 0 Henk 'm!

  • BBrunekreeft
  • Registratie: Mei 2004
  • Laatst online: 22:03

BBrunekreeft

Dus...

Wellicht dat
code:
1
echo strftime('%d.%m.%Y', strtotime($news->time_add));

iets voor je kan betekenen

[ Voor 84% gewijzigd door BBrunekreeft op 12-02-2008 14:38 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
BBrunekreeft schreef op dinsdag 12 februari 2008 @ 14:37:
Wellicht dat
code:
1
echo strftime('%d.%m.%Y', strtotime($news->time_add));

iets voor je kan betekenen
wow, dat doet inderdaad wat ik wilde. had zelf nooit bedankt dat ik strtotime en strftime tegelijk zou moeten gebruiken. Ik neem aan dat ik nu ook dat Locale enzo kan gebruiken? Gewoon een functie van maken, toch?

Ik zou dan SetDate($news->time_add) kunnen gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ondertussen is het me gelukt met devolgende functie:

code:
1
2
3
4
5
6
function DatePosted($date) {
    setlocale(LC_ALL, 'nl_NL');
    $date = strtotime($date);
    $date = strftime("%d %B %Y", $date);
    echo "Geschreven op ".$date;
}


Als ik nu

code:
1
DatePosted($news->time_add);


uitvoer.. krijg ik netjes "Geschreven op 12 februari 2008".

Bedankt voor jullie hulp!

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Afhankelijk van je model kun je dit trouwens ook prima door MySQL laten doen, zie date_format :)

Argumenteerbaar zit je daarmee layout code in je datamodel te stoppen, als je daar waarde aan hecht zou ik gaan voor UNIX_TIMESTAMP. Wat je nu feitelijk doet is je SQL engine een timestamp om laten zetten naar een string en strtotime die vervolgens weer om laten zetten naar een timestamp, dat is niet alleen inefficient maar vergroot ook de kans op fouten :)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hoe sla je uberhaupt datums op ?

datum => DATE veld in mysql => CURRDATE()
time => TIME veld in mysql => CURRTIME()
datetime => DATETIME veld in mysql => NOW()

'timestamps' heb je niks meer aan IMO...

EDIT:
Beetje afhankelijk van de php versie (5.1 /2 + geloof ik)
Heb je tegenwoordig ook:

PHP:
1
2
3
4
<?php
new DateTime();
new DateTimeZone();
?>


zie ook http://www.scriptorama.nl/

[ Voor 29% gewijzigd door Verwijderd op 12-02-2008 22:31 . Reden: tags ]


Acties:
  • 0 Henk 'm!

  • ColdFushion
  • Registratie: Januari 2008
  • Laatst online: 16-12-2024
Whoops, My BAD! 8)7

[ Voor 95% gewijzigd door ColdFushion op 12-02-2008 23:56 . Reden: foutje! ]


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
Irrelevant. Afgezien van het feit dat ze intern alsnog timestamps zijn zul je ze ook, hoe dan ook, van je database naar je script moeten krijgen. Dit kan door ze eerst om te zetten naar een string maar het kan ook, in mijn opinie beter, door simpelweg die timestamp waarde te gebruiken.

Hoe je er met PHP daarna mee rekent moet je zelf weten (al heb ik zelf een tijdje geleden ook al iets geschreven over PHP's datetime object hier, erg nuttig object inderdaad), feit blijft dat bijna alle PHP datumfuncties een timestamp verwachten. Dan kun je of strtotime weer gebruiken of een van de varianten daarop maar handig is anders :)

@ hierboven: topic al gelezen? ;)

[ Site ] [ twitch ] [ jijbuis ]

Pagina: 1