Как определить, прошло ли дата или нет для Сиднейского времени - PullRequest
0 голосов
/ 08 июня 2019

Я пытаюсь сделать простой скрипт.По сути, все, что он будет делать, - это сказать мне, прошла ли поставленная мною дата ($dateToCheck) или еще не наступила в будущем.Программа, кажется, работает и все, но проблема в том, что даты / время не конвертируются в сиднейское время.Я хочу, чтобы все даты были в Сиднее.Таким образом, скрипт работает, если между $dateToCheck и текущим временем существует огромный промежуток времени.Однако, если текущая дата и $dateToCheck находятся на расстоянии всего лишь нескольких часов, он перестает давать правильный ответ.Следовательно, проблема с часовыми поясами.

<?php
// All dates and time are in Sydney time
date_default_timezone_set('Australia/Sydney');
$currTime = time();
$dateToCheck = "2019-06-08T18:00:00"; // 10th June 2018 at 7:00pm

$answer = has_date_past($currTime, $dateToCheck);
echo $answer;

// If the date has passed the current time, return true
function has_date_past($currTime, $date) {
    $checkDate = strtotime($date);
    echo $checkDate . "<br>";
    echo $currTime . "<br>";

    if ($currTime <= $checkDate) {
        return 1;
    } else {
        return 0;
    }
}

?>

1 Ответ

1 голос
/ 08 июня 2019
$oz = new DateTimezone('Australia/Sydney');
$now = new DateTime('now', $oz);
$dateToCheck = new DateTime("2019-06-08T18:00:00", $oz);

var_dump($now, $dateToCheck, $now <=> $dateToCheck);

Выход:

object(DateTime)#2 (3) {
  ["date"]=>
  string(26) "2019-06-08 09:25:25.623080"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Australia/Sydney"
}
object(DateTime)#3 (3) {
  ["date"]=>
  string(26) "2019-06-08 18:00:00.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(16) "Australia/Sydney"
}
int(-1)
...