Timestamp opslaan in database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Willem vp

Willem vp

21/05/2015 21:31:49
Quote Anchor link
Als je het door MySQL wilt laten bepalen, zou je dat als volgt kunnen doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT IF(time_modified + INTERVAL 10 HOUR < NOW(),0,1) AS toegang
FROM tabelnaam

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.
 
PHP hulp

PHP hulp

20/04/2024 15:05:24
 
John De Zon

John De Zon

22/05/2015 16:09:20
Quote Anchor link
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!
Gewijzigd op 22/05/2015 16:22:14 door John De Zon
 

22/05/2015 16:20:21
Quote Anchor link
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
 
John De Zon

John De Zon

22/05/2015 16:23:02
Quote Anchor link
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
 

22/05/2015 16:24:55
Quote Anchor link
Persoonlijk vind ik dat ikzelf al druk genoeg ben met nadenken voor mezelf. Ik kan het overigens iedereen aanraden. Doe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT DATE_FORMAT(NOW(), '%d %m %Y @ %H:%i:%s');

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.
Gewijzigd op 22/05/2015 16:34:35 door
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

22/05/2015 18:55:59
Quote Anchor link
**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!


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 -
 
Ward van der Put
Moderator

Ward van der Put

22/05/2015 20:48:35
Quote Anchor link
Ger, zonder het topic te willen kapen, maar uit technische belangstelling:

Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?
 
Willem vp

Willem vp

22/05/2015 21:45:12
Quote Anchor link
> Moeten we timestamps dan in een database eigenlijk niet altijd in UTC opslaan?

Op mijn werk doen we dat inderdaad.
 
Thomas van den Heuvel

Thomas van den Heuvel

22/05/2015 23:19:49
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';
?>

Ouput:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2014-04-06 23:59:59 PDT equals 2014-04-07 08:59:59 CEST

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
 
Ward van der Put
Moderator

Ward van der Put

23/05/2015 14:32:35
Quote Anchor link
>> 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.
Gewijzigd op 23/05/2015 14:33:14 door Ward van der Put
 

23/05/2015 16:24:53
Quote Anchor link
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.
 
John De Zon

John De Zon

23/05/2015 16:30:17
Quote Anchor link
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
 

23/05/2015 16:42:03
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
print time() + 1200;

- Converteren naar gewone tijd: zie voorbeeld #1 van mijn vorige punt.
Gebruik de date() en eventueel de strtotime() functie.
 
John De Zon

John De Zon

23/05/2015 18:35:14
Quote Anchor link
Dank je An tje! Ik heb het alternatief gebruikt en het werkt!
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
//Time
$time = time();
//Timezone
date_default_timezone_set('Europe/Brussels');

//$db_time = tijd die in database staat.

$time_to_db = $time + 1200;
//Insert to database

//Kijken of tijd al voorbij is.

if($db_time < $time) {
echo "Tijd voorbij";
}
else { echo "Je moet nog even wachten.";}
?>


Dank je voor alle medewerking en voor al jullie tijd!

Mvg
Gewijzigd op 23/05/2015 18:36:21 door John De Zon
 
Ward van der Put
Moderator

Ward van der Put

23/05/2015 18:52:56
Quote Anchor link
>> $time_to_db = $time + 1200;

En wat doe je dan met zomertijd en wintertijd?
 

Pagina: « vorige 1 2



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.