MySQL 'date' converteren met php

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Hallo allemaal,

Ik ben bezig met een website waar ik nieuwsberichten op heb. In de database is de datum opgeslagen als type 'date', dus bijvoorbeeld 2010-17-01.
Echter op de website zelf zou ik dat graag willen weergeven als "17 januari 2010" ipv 2010-17-01.
Ik weet dat ik waarschijnlijk de php functie date() nodig heb en ik heb ook al aardig wat gezocht, maar het is me helaas nog niet gelukt om de data uit de database om te zetten naar mijn gewenste formaat.
Zou iemand mij hierbij kunnen helpen :)?

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
[url=http:://www.php.net/strtotime]Strtotime()[/] al geprobeerd?

Icons are overrated


Acties:
  • 0 Henk 'm!

  • nickb90
  • Registratie: Mei 2007
  • Laatst online: 13-09 23:30
Ikzelf heb daar altijd een zelfgemaakte functie voor gebruikt:
PHP:
1
2
3
4
5
6
7
8
9
function change_datetime($str)
   {             
      list($date, $time) = explode(' ', $str);
      list($year, $month, $day) = explode('-', $date);
      list($hour, $minute, $second) = explode(':', $time);

      $timestamp = $day."-".$month."-".$year." at ".$hour.":".$minute;
      return $timestamp;
   }


Echter kwam ik er een half jaar geleden achter dat het inderdaad ook met php zelf kan. Echter heb ik dit nooit geprobeerd, misschien dat je wat met de code hierboven kan? Misschien zelf een array met maanden toevoegen? ;)

Edit
bijvoorbeeld:

PHP:
1
2
3
$maanden[1] = jan;
$maanden[2] = feb;
enz.


en dan het volgende doen
PHP:
1
$timestamp = $day."-".$maanden[$month]."-".$year." at ".$hour.":".$minute;


Heb het zelf nog niet getest;)

[ Voor 17% gewijzigd door nickb90 op 17-01-2010 12:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij heb je helemaal geen php functie nodig! ;)

Je kan ook de DATE_FORMAT functie uit MySQL gebruiken. Dan kan je de datum al in het formaat "17 januari 2010" ophalen.

Standaard zal de naam van de maand dan in het engels zijn, maar met de juiste locale settings kan MySQL ook netjes de nederlandse maand voor je invullen. :)
http://dev.mysql.com/doc/refman/5.0/en/locale-support.html

Acties:
  • 0 Henk 'm!

  • Priet
  • Registratie: Januari 2001
  • Laatst online: 06:59

Priet

To boldly do what no one has..

Of gewoon zo:

PHP:
1
$strDatum = date("d-m-Y", strtotime($strDatumUitMySQL));

"If you see a light at the end of a wormhole, it's probably a photon torpedo!"


Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Het is me uiteindelijk met het volgende:

PHP:
1
2
$datum = $seminar['datum'];
$datumFormat = strftime("%e %B %Y",strtotime($datum));


en ook dit toe te voegen:
PHP:
1
setlocale(LC_TIME, 'NL_nl');


Bedankt iig voor de hulp!

Edit: wat soortgelijk is aan de oplossing van Priet ;)

[ Voor 16% gewijzigd door bekok op 17-01-2010 13:08 ]

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 17 januari 2010 @ 12:29:
Volgens mij heb je helemaal geen php functie nodig! ;)

Je kan ook de DATE_FORMAT functie uit MySQL gebruiken. Dan kan je de datum al in het formaat "17 januari 2010" ophalen.
Ehm, nee. Dat moet je helemaal niet willen. Als je het uit de database haalt als 2010-01-17 en vervolgens met strtotime naar een timestamp omzet, dan kun je alles met die datum wat je maar wil, inclusief rekenen of hersorteren mocht je dat later nog een keer nodig vinden. Wanneer je "17 januari 2010" ophaalt als string en vervolgens meteen afdrukt heb je nergens een waarde van enige betekenis waar je eventueel nog bewerkingen op kan doen.

Databases zijn voor data-opslag, niet voor presentatie. Je doet toch ook niet dit?
SQL:
1
SELECT CONCAT(CONCAT('<a href="/nieuws.php?id=', NewsId), '">Lees verder...</a>') FROM News

...alleen omdat je een nieuwslinkje nodig hebt in die vorm? Dat doe je toch ook in je businesscode? ;)

Overigens is strftime in PHP5 en lager niet helemaal thread safe op Windows-servers. Op het moment dat je setlocale gebruikt om de taal op Nederlands te zetten en intussen iemand anders een thread start op dezelfde server die een andere taal set of zelfs geen expliciete taal gebruikt (default is waarschijnlijk Engels) dan zal vanaf dat moment tijdens het runnen van je script elke verdere aanroep van strftime uitgaan van de "nieuwe" locale in het andere script dat gerund wordt. Voor weergave op een website die bij de volgende refresh weer goed komt maakt dat niet zoveel uit, maar ik kwam erachter bij het aanmaken van facturen, en daar staat het dan weer een stuk lulliger. ;) Afhankelijk van hoe belangrijk het is dat de taal Nederlands is zou je kunnen overwegen om een wrapperfunctie te maken:
PHP:
1
2
3
4
5
6
7
8
9
function DutchStrftime($format, $timestamp = null)
{
  $months = array('januari', 'februari', 'maart', 'april', 'mei', 'juni', 'juli', 'augustus', 'september', 'oktober', 'november', 'december');
  if (is_null($timestamp))
    $timestamp = time();

  $format = str_replace('%B', date('m', $timestamp), $format);
  return strftime($format, $timestamp);
}

[ Voor 34% gewijzigd door NMe op 17-01-2010 13:19 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

NMe schreef op zondag 17 januari 2010 @ 13:09:
[...]

Ehm, nee. Dat moet je helemaal niet willen. Als je het uit de database haalt als 2010-01-17 en vervolgens met strtotime naar een timestamp omzet, dan kun je alles met die datum wat je maar wil, inclusief rekenen of hersorteren mocht je dat later nog een keer nodig vinden. Wanneer je "17 januari 2010" ophaalt als string en vervolgens meteen afdrukt heb je nergens een waarde van enige betekenis waar je eventueel nog bewerkingen op kan doen.
Dat is ook een manier om het te bekijken. :) Als je de waarde meteen afdrukt kan het toch juist heel handig zijn?

Je voorbeeld over het nieuwslinkje daar ben ik het helemaal mee eens hoor, maar ik vind dat persoonlijk toch een iets andere case.

Als je een date kolom hebt in MySQL en je datum in unix-timestamp formaat wil hebben, dan kan je bij het selecteren natuurlijk ook gewoon de UNIX_TIMESTAMP functie gebruiken. In plaats van eerst een string op te halen en dan strtotime aan te roepen. ;)

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 17 januari 2010 @ 13:31:
[...]

Als je een date kolom hebt in MySQL en je datum in unix-timestamp formaat wil hebben, dan kan je bij het selecteren natuurlijk ook gewoon de UNIX_TIMESTAMP functie gebruiken. In plaats van eerst een string op te halen en dan strtotime aan te roepen. ;)
Ook waar natuurlijk. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1