DateTime php возвращает неправильную дату

Я использую PHP DateTime класс для создания даты для пользовательской системы лицензирования. Пока я отлаживал его, я заметил, что время даты всегда неверно, оно будет 5-dec-2018 но теперь мы находимся в ноябре, и эта дата будет такой же для expiration_date,

Как я могу исправить эту проблему? Мне нужно добавить 30 дней до даты начала пробного периода.

Вот код

class Activator {

private $uuid;
private $keygen;
private $licence_code;

public static function generateLicence($uuid) {

if (!file_exists(ABSPATH.'/DataStorage/.licence')) {
$start_date = new DateTime();
$time_zone = $start_date->setTimezone(new DateTimeZone('Europe/Rome'));
$trial_date = $start_date->add(new DateInterval('P30D'));
$end_date = $trial_date->format('d-M-Y');
$machine_uuid = bin2hex($uuid);
$licence_code = base64_encode($machine_uuid);

$licence_file = array(
'uuid' => $machine_uuid,
'activation_date' => $time_zone->format('d-M-Y'),
#'trial_version' => true,
#'expire_date' => $end_date,
#'licence_code' => $licence_code
);

$w = file_put_contents(ABSPATH.'/DataStorage/.licence', json_encode($licence_file));
echo $w;
}
}

0

Решение

Это ожидаемое поведение, так как вы add() на сегодняшний день (делая $start_date->add(...) — это изменяет исходный объект $start_date,

Это можно решить несколькими различными способами, хотя самый простой способ — создать новый экземпляр целиком, добавив 30 дней непосредственно в конструкцию. Вы также можете установить часовой пояс в качестве второго параметра new DateTime(),

$timezone    = new DateTimeZone('Europe/Rome');
$start_date  = new DateTime("now", $timezone);
$trial_date  = new DateTime("+30 days", $timezone);

Видеть это живое демо.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]