Tijd van timestamp halen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Guido  -

Guido -

06/12/2021 11:53:46
Quote Anchor link
Hallo,

Ik wil graag de tijd van een timestamp halen, die als string in de database staat.

Ik vraag me af of dit de (of een) juiste manier is?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$date_raw = '1638346790';
$date = strtotime(date("Y-m-d", intval($date_raw)));


Het resultaat moet dus een timestamp met tijd 00:00 worden.

In mijn geval haal ik timestamp als string uit database, maar in het voorbeeld dus een vaste gebruikt (1638346790).

Guido
Gewijzigd op 06/12/2021 11:56:02 door Guido -
 
PHP hulp

PHP hulp

25/11/2024 11:46:53
 
- Ariën  -
Beheerder

- Ariën -

06/12/2021 12:21:52
Quote Anchor link
String to time doe je nu. Een string naar een timestamp zetten.
Het omgekeerde dus van wat je nu wilt.

Quote:
In mijn geval haal ik timestamp als string uit database

Nee, een timestamp is een integer, en geen string.
Gebruik bij voorkeur de DateTime class van PHP:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$date
= new DateTime();

$date->setTimestamp(1638346790);
echo $date->format('H:i');
?>


Had ook met strftime gekund, maar die is vanaf PHP 8.1 deprecated. De standaard DateTime class is veel uitgebreider.
Gewijzigd op 06/12/2021 12:24:28 door - Ariën -
 
Guido  -

Guido -

06/12/2021 12:35:12
Quote Anchor link
Hoi,

Dank voor je reactie.

Ik ging ervan uit dat er een verschil is tussen opslaan als integer en opslaan als string? Of ligt dat aan de value-type (timestamp is alleen cijfers, dus integer)?

Ik wil het resultaat overigens niet als datum aan de voorkant weergeven, dus hoeft geen "leesbare datum" te worden. Gewoon een timestamp met tijd 00:00 uur.

Guido
Gewijzigd op 06/12/2021 12:35:48 door Guido -
 
- Ariën  -
Beheerder

- Ariën -

06/12/2021 13:57:10
Quote Anchor link
Of je het in MySQL als INT of VARCHAR opslaat, dat boeit PHP helaas niet echt.
Maar behandel in PHP wel de datatypes wel zoals wat ze werkelijk zijn.

En probeer mijn voorbeeld eens. Daar zie ik geen datum in.
Het is een kwestie van de juiste datetime-modifiers in je format() te gebruiken. Zo kan je elke formattering gebruiken die je maar wenst.
 
Guido  -

Guido -

06/12/2021 15:23:49
Quote Anchor link
Hoi,

Met jouw voorbeeld wordt $date met "leesbaar" formaat getoond (08:19), maar ik wil de (Unix) timestamp blijven gebruiken. Jaar/maand/dag en dus met tijd 00:00. Hoe bereik ik dat dan?

Ik weet dat ik de tijd kan instellen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
setTime( 0, 0, 0, 0)


Maar heb te weinig kennis om dit te combineren met jouw voorbeeld.

Guido
 
- Ariën  -
Beheerder

- Ariën -

06/12/2021 15:27:28
Quote Anchor link
Hoe moet het er dan uitzien? Geef eens een voorbeeld?
 
Guido  -

Guido -

06/12/2021 17:21:39
Quote Anchor link
Hoi,

Denk dat ik het heb:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$date = new DateTime();
$date->setTimestamp(1638346790);
$time = $date->setTime(0, 0, 0, 0);
$datum_met_midnight_time = $time->getTimestamp();    
echo $datum_met_midnight_time;


Resultaat is: 1638316800

Is dit de juiste manier?

Guido
 
Ivo P

Ivo P

07/12/2021 10:57:23
Quote Anchor link
Edit:

timestamp is wel juist. Maar let ook op de timezone waar je in werkt. Mogelijk staat dat al centraal in je config of in php.ini, maar als niet, dan kun je zo maar zitten te werken op een Amerikaans, Engelse of Russische tijd.


Je code is trouwens in te korten tot:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$date
= new DateTime();
$date->setTimestamp(1638346790);
$date->setTime(0, 0, 0, 0);
echo $date->getTimestamp();  
?>


of

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$date
= DateTime::createFromFormat('U', 1638346790);
$date->setTime(0, 0, 0, 0);
echo $date->getTimestamp();  
?>
Gewijzigd op 07/12/2021 11:01:40 door Ivo P
 
Guido  -

Guido -

07/12/2021 11:15:16
Quote Anchor link
Dank voor je reactie Ivo!

Ja, ik houd ergens anders al rekening met UTC.

Vraagje, kan ik new DateTime meerdere keren in hetzelfde script aanroepen/gebruiken?
Ik wil het namelijk voor een begin- en eindtijd gebruiken.

Dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$date
= new DateTime();
$date->setTimestamp(1638346790);
$date->setTime(0, 0, 0, 0);
$begin_tijd = $date->getTimestamp();  

$date_end = new DateTime();
$date_end->setTimestamp(1638346790);
$date_end->setTime(0, 0, 0, 0);
$eind_tijd = $date_end->getTimestamp();  
?>


Guido
 
- Ariën  -
Beheerder

- Ariën -

07/12/2021 11:21:32
Quote Anchor link
Je bent één stap verwijderd van je editor en je browser. Ga dus het avontuur aan en meld je bevindingen ;-)
Gewijzigd op 07/12/2021 11:22:06 door - Ariën -
 
Ivo P

Ivo P

07/12/2021 11:21:57
Quote Anchor link
Ja dat kan: daarom staat er ook "new" bij.

"maak een nieuw object van het type Datetime"

Maar is er een reden om alle tijdstippen uit te rekenen obv het aantal seconden sinds 1970?
Ja: tutorials van een jaar of 10 oud doen dat, omdat toen datetime nog niet bestond.

En ook databases als MySQL kennen kolommen van het type DateTime.
Ook daar kun je veel gemakkelijker mee werken.

Stel je wilt alle records die op een dinsdag zijn ingevoerd:

SELECT * FROM Tabel WHERE DAYOFWEEK(datumtijdkolom) = 3

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_dayofweek

Dat is schier onmogelijk met een epoch timestamp
 
Guido  -

Guido -

07/12/2021 11:57:21
Quote Anchor link
Mijn script betreft een (WordPress) evenementen plugin en datum + tijd wordt als UNIX timestamp (UTC) in de database opgeslagen.

In mijn voorbeeld gebruik ik een "vast" timestamp, maar dat verschilt natuurlijk per evenement.

Guido
 



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.