Timestamp opslaan in database
Als je het door MySQL wilt laten bepalen, zou je dat als volgt kunnen doen:
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.
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.
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!
Gewijzigd op 22/05/2015 16:22:14 door John De Zon
Tijd naar tijd converteren? Dat is toch hetzelfde? Als je de data volgens een eigen format wilt moet je het lief aan de database vragen, meestal is er wel een formatting-functie.
vb. MySQL: https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
vb. MySQL: https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format
Ik snap niets van al die uitleg kan je niet gewoon zeggen wat ik moet doen?
Gewijzigd op 22/05/2015 16:26:30 door John De Zon
Persoonlijk vind ik dat ikzelf al druk genoeg ben met nadenken voor mezelf. Ik kan het overigens iedereen aanraden. Doe:
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.
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 -
Ger, zonder het topic te willen kapen, maar uit technische belangstelling:
Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?
Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?
> Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?
Op mijn werk doen we dat inderdaad.
Op mijn werk doen we dat inderdaad.
Unix timestamps (zoals je die in PHP hebt) zijn als het goed is altijd UTC. De functies die op timestamps werken voeren al automatisch conversies uit tussen UTC en de door jouw ingestelde / default tijdszone. Daarom lijkt het alsof de oorspronkelijke datums/tijden niet UTC zijn maar in je eigen tijdszone worden opgeslagen, maar onder water worden er allerlei conversies uitgevoerd.
Stel bijvoorbeeld dat je wilt weten hoe laat het hier is als het 6 april 2014 23:59:59 pacifische tijd is:
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 :].
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
>> Maar het zou inderdaad een goede gewoonte zijn om DATETIME altijd op te slaan in UTC, als je dat bedoelt.
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.
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
Was het niet zo dat als de datum/tijd tussen de database en PHP verschillen, bijvoorbeeld als ze op verschillende servers draaien en eentje is toevallig niet gesynchroniseerd of staat in een andere tijdzone, er dingen misgaan als je daar geen rekening mee houdt?
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.
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.
Hallo,
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
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
Je hebt nog steeds niet aangegeven welke database je gebruikt.
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.
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.
Dank je An tje! Ik heb het alternatief gebruikt en het werkt!
Dank je voor alle medewerking en voor al jullie tijd!
Mvg
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
>> $time_to_db = $time + 1200;
En wat doe je dan met zomertijd en wintertijd?
En wat doe je dan met zomertijd en wintertijd?




