Timestamp opslaan in database
In je query-resultaat krijg je dan een veld 'toegang' dat een 0 heeft als de functie nog niet gebruikt mag worden en een 1 als dat wel mag.
vb. MySQL: https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Gewijzigd op 22/05/2015 16:26:30 door John De Zon
En je laat de database de tijd omzetten naar de vorm die je aangeeft. Wil je het anders? Dan verander je gewoon de tweede parameter van DATE_FORMAT zoals je hebben wilt. Weet je niet hoe? Dan zoek je het op in de documentatie van MySQL. Uiteraard geldt het voorbeeld niet als je een andere database gebruikt (behalve MariaDB), in dat geval moet je je verdiepen in die database.
**KNIP** op 22/05/2015 16:09:20:
Kan ik misschien de woorden (tijd) uit de database naar een tijd converteren? Ik gebruik deze tijdsnotatie: 18 05 15 @ 17:08:15.
Alvast bedankt!
Alvast bedankt!
Als het op die manier in de database staat ben je niet goed bezig.
Een datum/tijd hoort een DATETIME datatype te hebben zodat je (zonder verdere ingrepen) daarmee kunt rekenen.
Overigens is er ook een functie die het tegenovergestelde doet van DATE_FORMAT nl STR_TO_DATE.
Gewijzigd op 03/04/2017 18:56:34 door - Ariën -
Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?
Op mijn werk doen we dat inderdaad.
Stel bijvoorbeeld dat je wilt weten hoe laat het hier is als het 6 april 2014 23:59:59 pacifische tijd is:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// 2014-04-06 23:59:59 PDT
date_default_timezone_set('America/Los_Angeles'); // Pacific
$time = mktime(23, 59, 59, 4, 6, 2014); // hms mdy - built in configured timezone, converted to UTC
echo date('Y-m-d H:i:s', $time).' PDT equals '; // time format function converts it (back) from UTC to set timezone
date_default_timezone_set('Europe/Amsterdam');
echo date('Y-m-d H:i:s', $time).' CEST';
?>
// 2014-04-06 23:59:59 PDT
date_default_timezone_set('America/Los_Angeles'); // Pacific
$time = mktime(23, 59, 59, 4, 6, 2014); // hms mdy - built in configured timezone, converted to UTC
echo date('Y-m-d H:i:s', $time).' PDT equals '; // time format function converts it (back) from UTC to set timezone
date_default_timezone_set('Europe/Amsterdam');
echo date('Y-m-d H:i:s', $time).' CEST';
?>
Ouput:
Hierbij gebruik je dus continu UTC om tijden om te rekenen. Maar de timestamp zelf is dus altijd UTC.
DATETIME daarintegen is niet timezone-aware.
Hm, er is ook zoiets als TIMESTAMP in MySQL, maar deze heeft een beperkt waardenbereik.
Maar het zou inderdaad een goede gewoonte zijn om DATETIME altijd op te slaan in UTC, als je dat bedoelt.
Ik denk dat het gebruik van timestamps voor grotere problemen gaat zorgen dan de milleniumbug eerlijk gezegd :].
Gewijzigd op 22/05/2015 23:21:18 door Thomas van den Heuvel
Dat bedoelde ik inderdaad. Eigenlijk is dat het verschil tussen model enerzijds en view anderzijds: de werkelijke datum en tijd (UTC) kan verschillen van de weergegeven datum en tijd, bijvoorbeeld omdat niet iedere gebruiker zich in dezelfde tijdzone bevindt.
>> Ik denk dat het gebruik van timestamps voor grotere problemen gaat zorgen dan de milleniumbug eerlijk gezegd :].
Die bug heeft zelfs al een naam: de Year 2038 Bug.
Maar ik denk dat het wel los zal lopen. Steeds meer 64-bits besturingssystemen hebben bijvoorbeeld wrappers die timestamps achter de schermen gewoon afhandelen als 64-bits integers.
Gewijzigd op 23/05/2015 14:33:14 door Ward van der Put
Er zijn bugs omtrend het omrekenen van de tijdzone, die tabel schijnt zelfs in ieder geval in een aantal PHP versies corrupt te zijn volgens bug #492025.
Voor de zekerheid kan je gebruik maken van de date_default_timezone_set() functie om PHP te synchroniseren met de tijdzone van de database. Een reden te meer om datum/tijd-berekeningen te mijden in PHP en zoveel mogelijk te laten uitvoeren door de database. Dat gaat ook nog eens veel sneller als je hem toch al in een query kan meepakken.
Ok wat moet ik dus doen? Kan iemand alsjeblieft een stukje code doorsturen?
Ik ben al enkele dagen bezig met dit probleem en zou het graag afhandelen.
Wat moet het script doen?:
- Ik moet het uit de database halen.
- Hoe ik het in de database moet opslagen(date, datatime, timestamp, ...)
- Hoe ik kan kijken of de tijd al beeïndigd is.
Alternatief:
- Altijd met de gewone time() rekenen.
- Hoe 20 min erbij tellen?
- Hoe converteren naar gewone tijd?
Dit waren mijn vragen. Alvast bedankt voor alle hulp die ik al gekregen heb in dit topic!
Mvg
Aannemende dat je MySQL of MariaDB gebruikt:
- Uit de database halen; zie http://php.net/manual/en/mysqli.quickstart.php
- Hoe je het moet opslaan, zie:
. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-types.html
. http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html
- Hoe je kunt kijken of de tijd al beëindigd is: zie het voorbeeld van Willem vp op de 2e pagina van hier
Alternatieven:
- Je kunt in PHP met time() rekenen. Zie http://php.net/manual/en/function.time.php voorbeeld #1.
- Hoe 20 minuten erbij tellen, zie voorbeeld #1 van mijn vorige punt:
- Converteren naar gewone tijd: zie voorbeeld #1 van mijn vorige punt.
Gebruik de date() en eventueel de strtotime() functie.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dank je voor alle medewerking en voor al jullie tijd!
Mvg
Gewijzigd op 23/05/2015 18:36:21 door John De Zon
En wat doe je dan met zomertijd en wintertijd?