laravel carbon Сравнение двух часовых поясов с отметкой времени - PullRequest
0 голосов
/ 26 января 2019

Я хочу сравнить время разных часовых поясов.Временная метка хранится в базе данных с использованием Mutators.Мой код, как показано ниже,

public function setScheduledOnAttribute($value)
{
    $this->attributes['scheduled_on'] = Carbon::parse($value)->timestamp;
}

public function getScheduledOnAttribute($value)
{
    return $value * 1000;
}

Как сравнить текущее время с текущим временем в Africa/Casablanca часовом поясе.

Сейчас я делаю это

 $time = Carbon::now();
 $scheduleTime = Carbon::createFromTimestamp($scheduleTime['scheduled_on']/1000, 'Africa/Casablanca')->toDateTimeString();

Я прав?Это не удовлетворяет условию

if ($time >= $scheduleTime) {
// some task
}

, пожалуйста, предложите мне ... любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 января 2019

Вам не нужно разбирать его на строку даты и времени.Если вы сохраните его в качестве экземпляра Carbon, его будет гораздо проще сравнить.Вот несколько примеров:

// First we create a new date/time in Dubai's timezone
$dubai = \Carbon\Carbon::now(new DateTimeZone('Asia/Dubai'));

echo "The date/time in Dubai is: {$dubai} \n";

// We convert that date to Casablanca's timezone 
$casablanca = \Carbon\Carbon::createFromTimestamp($dubai->timestamp, 'Africa/Casablanca'); 

echo "The date/time in Casablanca is: {$casablanca} \n";

// Let's create a date/time which is tomorrow in Zurich for comparison 
$tomorrowInZurich = now('Europe/Zurich')->addDay(1); 

echo "The date/time tomorrow in Zurich will be: {$tomorrowInZurich} \n";

if($tomorrowInZurich->gt($casablanca)) {
    echo "The time {$tomorrowInZurich} is greater than {$casablanca}"; 
}

Вы можете увидеть рабочий пример здесь .

В вашем конкретном случае, чтобы сравнить временные метки, вы просто должны сделать:

$scheduleTime = Carbon::createFromTimestamp($scheduleTime['scheduled_on'] / 1000, 'Africa/Casablanca');

if(now()->gte($scheduleTime)) {
    //
}

// gte() is just a shorthand for greaterThanOrEqualTo()
...