Date & timestamp

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J C

J C

26/12/2014 22:18:39
Quote Anchor link
In mijn database neem ik automatisch de datum en tijd mee bij het invoeren van een rij.
Als resultaat slaat hij dit op:

2014-12-26 21:57:41

Nu wil ik dat laten zien als

26-12-2014

Ik wilde dit doen door:

date('d-m-Y', $variabel)

Maar krijug dan als resultaat 1970-01-01
Het lijkt erop dat de functie alleen voor unix-timestamp werkt.

Welke functie zou ik dan wel moeten gebruiken?

Ik heb ook het volgende geprobeert:

DateTime($prod['changedate'])->format('d-m-Y')
Maar krijg dan foutmelding:
Fatal error: Call to undefined function DateTime()

Als ik dit gebruik:
date_format($prod['changedate'], 'd-m-Y')
krijg ik:
Warning: date_format() expects parameter 1 to be DateTime,
Gewijzigd op 26/12/2014 22:33:16 door J C
 
PHP hulp

PHP hulp

03/12/2024 18:21:13
 
Ivo P

Ivo P

27/12/2014 00:09:31
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$date
= new datetime($row['datumuitdatabase']);

echo $date->format('d-m-Y');

?>
 
Eddy E

Eddy E

27/12/2014 06:40:59
Quote Anchor link
Of, als je het echt date() wilt blijven gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
date('d-m-Y', strtotime($variabel));
?>


De functie strtotime() is best krachtig, hij maakt van bijna elk fatsoenlijk tijdsformaat een timestamp.
Dus 2014-12-27 zal hij ook omzetten, maar 27 december 2014 ook.
 
Wouter J

Wouter J

27/12/2014 10:42:16
Quote Anchor link
Beter is het om de datum op te slaan in een datetime field in SQL en dit dan in de query op te lossen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_FORMAT(changedate, '%d-%m-%Y') AS changedate FROM ...
 
Ivo P

Ivo P

27/12/2014 13:03:28
Quote Anchor link
Dat riep ik vroeger ook, maar dan is je query beperkt tot 1 toepassing.

Wil je die elders weer opnieuw gebruiken, dan zit je precies aan die datumschrijfwijze vast.

En het kan zijn dat je in een jaaroverzicht het jaartal niet noemt, of in een maand overzicht de maand.

En voor een Duitser wil je 27. Dez schrijven en voor een Engelstalige 12/27/2014.

Zou je dan steeds een nieuwe query kosten, of je moet elke query weer dynamisch gaan samenstellen met de juiste %-string, met alle risico's van dien.

Toevoeging op 27/12/2014 13:04:31:

en ook trouwens als op de ene plek de datum en op een andere plek het tijdstip wilt noemen.
 
Joakim Broden

Joakim Broden

27/12/2014 13:22:55
Quote Anchor link
Ivo dat is volkomen onzin wat je nu zegt.

Bijvoorbeeld voor datum:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_FORMAT(date, '%d-%m-%Y') AS dateFormat FROM ...

Bijvoorbeeld voor datum en tijd:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_FORMAT(date, '%d-%m-%Y') AS dateFormat, DATE_FORMAT(date, '%H-%i') AS timeFormat FROM ...

Voor meertaligheid zou je bijvoorbeeld dit kunnen doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
    switch ($lang) {
        case
'NL':
            $format = '%d-%m-%Y';
            break;
        default:

            $format = '%Y-%d-%m';
            break;
    }

?>

SELECT DATE_FORMAT(date, '.$format.') AS dateFormat FROM ...

Bovenstaande vind je risicovol? dat is toch het zelfde als werken met de PHP date functie? Gewoon zorgen dat je $format goed opbouwt. Als je het nou format verkeerd opbouwt via SQL of PHP beide keren gaat hij op zijn plaat.

En mocht je op een later moment toch een ander formaat wilt gebruiken kun je dat vooraf al in de query doen via een apparte var aan te maken of later alsnog via PHP date functie te formarteren.
 
Ivo P

Ivo P

27/12/2014 13:53:22
Quote Anchor link
ik denk dan meteen door naar de situatie waarbij gebruikers het datumformaat gaan kiezen. En bij gebruiker, denk ik ook aan de beheerder van de site, die dan Dezember en Mei wil zien op zijn site.

Dan krijg je dus dat er array's gebruikt gaan worden om de namen van de maanden te vertalen.
Krijg je allemaal nog wel verwerkt in zo'n switch hoor.

Maar over een half jaar valt de site om, omdat de beheerder een typfout maakt als hij het ook nog in het Frans wil vertalen.
Of omdat hij op een andere manier ergens gewoon de string met %-tekens verknoeit.

Hardcoded lukt zoiets wel. Dat klopt.
Maar ik heb zelf liever dat dingen in PHP fout gaan, dan in een query. Een mislukte query levert gewoon geen resultaat op, terwijl in PHP iets handiger is af te vangen.

----
Het voor beeld van de datum en de tijd in die 2 query's, is wat ik bedoel met "doe het nu maar in je script."
Want jij hebt nu een 2e variant gebruikt omdat je bedenkt dat je tijd ook nodig hebt.

Maar in je volgende script blijkt ook het aantal seconden nodig.
En heb je de onderdelen van de datum in 3 elementen nodig voor een date-picker die bestaat uit 3 pulldowns.....

Daarom selecteer ik gewoon de datum-kolom (liefst niet "date" geheten) en pak ik met format() eruit wat ik nodig heb.

Kan ik er bovendien ook eenvoudig mee rekenen, zou ik bijvoorbeeld nodig hebben of iets ouder is dan x dagen.
(ja ook dat kan in een query, maar ik heb het liefst universeel bruikbare query's en niet een query voor elke situatie.
Als je namelijk een kolom toevoegt, mag je alle plekken met een query af om die kolom toe te voegen
 
J C

J C

03/01/2015 18:23:58
Quote Anchor link
Dank jullie wel voor alle extra uitleg. Ik heb gekozen voor de oplossing van Ivo.
Het is maar een tijdelijke website en voor mij op dit moment de makkelijkste oplossing.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.