[PHP/MYSQL] Formatteren van dates uit MySQL

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi,

Een lange tijd heb ik gewerkt met dates in MySQL, om deze te formatteren gebruikte ik de volgende vrij basale code:

PHP:
1
2
3
4
5
6
7
8
9
10
function datum($x) {
    if (isset($x)) {
        $datum2 = substr($x,-2);
        $datum2 .= "-";
        $datum2 .= substr($x,5,2);
        $datum2 .= "-";
        $datum2 .= substr($x,0,4);
        return($datum2);
    }
}


De laatste tijd werkte ik eigenlijk liever met timestamps, vanuit PHP welliswaar, dus UNIX timestamp vanaf 1 januari 1970 (toch?)... Aangezien ik nu een database heb gemaakt met historische personen, kan ik de geboortedata hier dus niet meer in kwijt :(

Ik weet dat je met MySQL, Date_Format kan gebruiken, alleen dit blijkt niet te werken in mijn update query (ik maak gebruik van Active Records in CodeIgniter).

Iemand een makkelijkere code om eenvoudig data te manipuleren van voor 1970?? (Dus geen timestamps)

Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon als type Date 8)7?

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Data van voor 1970 krijgt gewoon een negatieve timestamp. Daarnaast kun je je data gewoon als datum type opslaan in mysql. Bij het uitlezen kun je daar dan de unixtime functie omheen zetten zodat je keurig timestamps binnenkrijgt in php. Best of both worlds.

Meer info bij de date and time fields sectie van de mysql manual

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • frickY
  • Registratie: Juli 2001
  • Laatst online: 18-09 14:42
Alleen ondersteunt bijv PHP's date-functie geen negatieve timestamps.

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 21:10

pietje63

RTFM

Verwijderd schreef op vrijdag 10 november 2006 @ 16:31:
Ik weet dat je met MySQL, Date_Format kan gebruiken, alleen dit blijkt niet te werken in mijn update query (ik maak gebruik van Active Records in CodeIgniter).
Ik zou me eerder hier op focussen, waarom dit niet werkt. Ik ben laatst met deze manier van data uit mysql ophalen begonnen, en het werkte erg makkelijk en flexibel vond ik.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Boland... jemig dat ik daar niet aan heb gedacht ... :O

@Janoz, idd ondersteunt PHP dat niet in z'n date() functie.

@Pietje, ophalen is ook geen enkel probleem! Ik moet alleen de opgehaalde data weer terug formatteren in een update of insert query, hier zit hem nou juist het probleem, als ik hier Date_Format gebruik krijg ik foutmeldingen.

Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 21:10

pietje63

RTFM

Let daarom op het eerste deel van mijn reply, zoek eens uit waarom het inserten/updaten niet werkt. Wat is de foutmelding? Heeft de insert/update de goede volgorde (bij mij was dit yyyy-mm-dd) etc.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

Verwijderd

frickY schreef op vrijdag 10 november 2006 @ 18:16:
Alleen ondersteunt bijv PHP's date-functie geen negatieve timestamps.
PHP:
1
echo date("Y-m-d H:i:s", -87654321);

Dit is gewoon 1967-03-23 12:34:39 onder PHP 5.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op zaterdag 11 november 2006 @ 12:43:
[...]


PHP:
1
echo date("Y-m-d H:i:s", -87654321);

Dit is gewoon 1967-03-23 12:34:39 onder PHP 5.
en in PHP4??

Okee... dat werkt dus gewoon :?

naja... beter, probleem opgelost!

[ Voor 14% gewijzigd door Verwijderd op 11-11-2006 14:10 ]


Acties:
  • 0 Henk 'm!

  • paulh
  • Registratie: Juli 1999
  • Laatst online: 18-09 20:05
Werkt dat tegenwoordig onder windows? Vroeger (php4) kon dat alleen onder (lin)ux.

[ZwareMetalen.com] - [Kom in aktie tegen de CO2 maffia]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De server draait ook onder ux... het gebruiken van een negatieve timestamp in date is dus ook niet het probleem blijkt nu....

mktime() die ik wil gebruiken om de timestamp te creeren kan geen waardes aan <= 31-12-1969. Iemand hier een oplossing voor? [s]Zat zelf te denken om het jaartal gewoon met 4000 te verhogen, om dit later weer te corrigeren, wel een beetje houtje touwtje oplossing, maar het zou kunnen werken.[s]

edit: dat werkt dus ook niet... het jaartal moet liggen tussen 1969 < x < 2037, anders pakt mktime hem zowiezo niet!

Ik gebruik wel een alternatieve methode om een timestamp te fabrieken

[ Voor 19% gewijzigd door Verwijderd op 12-11-2006 16:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Huh?

PHP:
1
2
3
echo mktime(19, 0, 0, 12, 6, 1935);
// sinterklaasavond, 1935
// -1075180772


PHP 5.0.4 op MacOS X 10.4.8

edit: www.php.net/mktime
On systems where time_t is a 32bit signed integer, as most common today, the valid range for year is somewhere between 1901 and 2038, although this limitation is overcome as of PHP 5.1.0.

[ Voor 47% gewijzigd door Verwijderd op 12-11-2006 18:56 ]


Acties:
  • 0 Henk 'm!

  • XWB
  • Registratie: Januari 2002
  • Niet online

XWB

Devver
paulh schreef op zondag 12 november 2006 @ 12:49:
Werkt dat tegenwoordig onder windows? Vroeger (php4) kon dat alleen onder (lin)ux.
Doet het perfect onder Windows :)

March of the Eagles


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@draaischaap... ik heb dus PHP 4.3 :(

andere alternatieven? Ik moet dus echt iets hebben wat waardes kan bevatten tussen 0 tot 20xx en werkt in PHP 4.3...

Acties:
  • 0 Henk 'm!

Verwijderd

Boland gaf eerder al de juiste oplossing; gebruik het veldtype date of datetime. In combinatie met de MySQL-functie date_format() (zie ook eerdere link) kun je alles doen en laten wat je wilt met je opgeslagen datum. Als het niet aan je wensen voldoet, moet je nadenken of je wel de juiste structuur gebruikt. Oplossingen met negatieve timestamps die het toevallig doen op sommige systemen lijken me niet de juiste en is niets anders dan wachten op bugs en foutmeldingen.

Kortom, probeer het direct goed te doen. Succes!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ivy... dat is me bekend, als je mn reply's leest zul je zien dat ik bij het gebruik van DATE_FORMAT() icm UPDATE/INSERT query's problemen heb, ik moet namelijk toch een Europees datum formaat terug vertalen naar een US formaat voor in MySQL.. aangezien ik reeds werk met PHP timestamps in MySQL dacht ik, het zou handig zijn als alle "data" op dezelfde manier opgeslagen worden.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

En als je je topic zelf ook goed gelezen had dan had je ten eerste al kunnen zien dat het niet aan te raden is om timestamps te gebruiken in mysql aangezien hiervoor een ander keurig datatype bestaat die makkelijk naar een timestamp kan worden geconverteerd. Hierdoor kun je in je queries gebruik blijven maken van alle verschillende date en time functies. Daarnaast is al meerdere keren gevraagd wat nu precies je problemen zijn bij het inserten en updaten. 'Ik krijg foutmeldingen' is daarop natuurlijk bij lange na niet een toereikend antwoord.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'

Pagina: 1