Hallo,

Voor een script maak ik gebruik van de datum zonder tijd (midnight):

$date = strtotime( 'today' );


Maar bovenstaande geeft de UTC tijdzone en ik wil graag de locale tijdzone gebruiken (Europe/Amsterdam).

Ik heb al geprobeerd om eerst een nieuwe tijdzone in te stellen:

$tijdzone = date_default_timezone_set('Europe/Amsterdam');
$date = strtotime( 'today' );


Maar dit resulteert erin dat er 1 uur van de midnight tijd afgetrokken worden, dus tijd wordt 11:00:00 pm (= vorige dag).

Hoe kan ik bovenstaande gebruiken, inclusief de NL tijdzone?

Guido
Kan je geen timezone in php.ini instellen?
<?php

$date = new DateTime('now', new DateTimeZone('Australia/Perth'));

echo 'current time in Perth: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'current timestamp in Perth: ' . $date->getTimestamp() . '<br>';

$date->setTime(0, 0);

echo 'time in Perth at midnight: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'timestamp in Perth at midnight: ' . $date->getTimestamp() . '<br><br>';


$date = new DateTime('now', new DateTimeZone('Europe/Amsterdam'));

echo 'current time in Amsterdam: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'current timestamp in Amsterdam: ' . $date->getTimestamp() . '<br>';

$date->setTime(0, 0);

echo 'time in Amsterdam at midnight: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'timestamp in Amsterdam at midnight: ' . $date->getTimestamp() . '<br>';

?>
Resultaat:

current time in Perth: 23-12-2019 22:49:18
current timestamp in Perth: 1577112558
time in Perth at midnight: 23-12-2019 00:00:00
timestamp in Perth at midnight: 1577030400

current time in Amsterdam: 23-12-2019 15:49:18
current timestamp in Amsterdam: 1577112558
time in Amsterdam at midnight: 23-12-2019 00:00:00
timestamp in Amsterdam at midnight: 1577055600

Hiermee zou het moeten lukken.
Kan je geen timezone in php.ini instellen?


Nee, betreft WordPress website en standaard tijdzone moet altijd UTC zijn, ivm bepaalde native scrips van dat cms.

Bij nader inzien kan ik deze vraag misschien beter op het WordPress forum stellen, want dit cms heeft ook eigen datum en tijd gerelateerde functions.

Maar mocht er ook een standaard PHP fix hiervoor zijn, graag!

Guido

[size=xsmall]Toevoeging op 23/12/2019 15:58:55:[/size]

Bedankt Frank, ik ga hiermee aan de slag!

Guido
En zo ook UTC uiteraard..
<?php
$date = new DateTime('now', new DateTimeZone('UTC'));

echo 'current time in UTC: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'current timestamp in UTC: ' . $date->getTimestamp() . '<br>';

$date->setTime(0, 0);

echo 'time in UTC at midnight: ' . $date->format('d-m-Y H:i:s') . '<br>';
echo 'timestamp in UTC at midnight: ' . $date->getTimestamp() . '<br>';
?>
Hoi Frank,

timestamp in Amsterdam at midnight: 1577055600


Volgens Epoch Unix Time Stamp Converter is deze stamp de vorge dag: 12/22/2019 @ 11:00pm (UTC)

(dus zelfde als waar ik tegenaan loop)

Ik gebruik deze tijd om events te tonen. Event wordt wel of niet getoond, gebaseerd op de NL tijd.
Omdat ik nu nog de UTC tijd gebruik, is event tot 01:00 NL tijd zichtbaar.

Guido

[size=xsmall]Toevoeging op 23/12/2019 16:34:48:[/size]

Ik denk dat ik het gevonden heb door de offset erbij op te tellen:


$date = new DateTime('now', new DateTimeZone('Europe/Amsterdam'));
$date->setTime(0, 0);
$midnight = $date->getTimestamp()+$date->getOffset();
echo 'timestamp in Amsterdam at midnight: ' .$midnight.'<br>';


Guido
Ja, ik moet vandaag 12:00 am hebben. Dus ik tel de offset er weer bij op. Zodat het vandaag 12:00 am wordt. Oftewel, een event blijft de hele dag zichtbaar en verdwijnt na 12:00 am vannacht.
<?php
$tijdzone = date_default_timezone_set('Europe/Amsterdam');
$date = strtotime( 'today' );
echo date('d-m-Y H:i:s',$date);
?>

Geeft gewoon 23-12-2019 00:00:00
Each parameter of this function uses the default time zone unless a time zone is specified in that parameter. Be careful not to use different time zones in each parameter unless that is intended. See date_default_timezone_get() on the various ways to define the default time zone.

Dus ja als je dan de default time zone naar Europe/Amsterdam zet dan zou het moeten werken.

Reageren