Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DateTime php返回错误的日期_Php_Datetime_Licensing - Fatal编程技术网

DateTime php返回错误的日期

DateTime php返回错误的日期,php,datetime,licensing,Php,Datetime,Licensing,我正在使用PHPDateTime类为自定义许可系统生成日期。当我调试它的时候,我注意到日期时间总是错误的,它将是2018年12月5日,但现在我们是在11月,这个日期对于到期日也是一样的 我如何解决这个问题?我需要增加30天的开始日期的试用期 这是代码 class Activator { private $uuid; private $keygen; private $licence_code; public static function generateLicence($u

我正在使用PHP
DateTime
类为自定义许可系统生成日期。当我调试它的时候,我注意到日期时间总是错误的,它将是2018年12月5日,但现在我们是在11月,这个日期对于到期日也是一样的

我如何解决这个问题?我需要增加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;
    }
}

这是预期的行为,因为您将()添加到日期(通过执行
$start\u date->add(…)
-这将修改原始对象
$start\u date

您可以通过几种不同的方法来解决这个问题,尽管最简单的方法是直接在构造中添加30天来创建一个新实例。您还可以将时区设置为
new DateTime()
的第二个参数


看到这一点。

它工作得很好,谢谢你的回答,我没有考虑在使用
DateTime::add()
函数时修改原始
DateTime
对象的事实。我也可以省略时区,对吗?是的,你不必指定时区,除非它与服务器时区不同。
$timezone    = new DateTimeZone('Europe/Rome');
$start_date  = new DateTime("now", $timezone);
$trial_date  = new DateTime("+30 days", $timezone);