Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.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
Php 使用DateTime将日期设置为当前日期并对其进行修改_Php_Datetime - Fatal编程技术网

Php 使用DateTime将日期设置为当前日期并对其进行修改

Php 使用DateTime将日期设置为当前日期并对其进行修改,php,datetime,Php,Datetime,我试图1)将一个变量设置为当前日期2)将其格式化为Y-m-d,3)修改它以查找过去7天的日期 下面是我用来执行此操作的代码: $date = new DateTime(); // get current date $date->format('Y-m-d'); // format it $wow_date = $date->modify('-7 days'); // find 7 days before current date 当我运行这个程序时,我得到了一个500错误代码,并

我试图1)将一个变量设置为当前日期2)将其格式化为Y-m-d,3)修改它以查找过去7天的日期

下面是我用来执行此操作的代码:

$date = new DateTime(); // get current date
$date->format('Y-m-d'); // format it 
$wow_date = $date->modify('-7 days'); // find 7 days before current date
当我运行这个程序时,我得到了一个500错误代码,并且无法解决为什么会发生这种情况。如果有人能给我指出正确的方向,我将不胜感激

更新

谢谢你的帮助/评论。以下是我最后的结论:

$date = new DateTime(null, new DateTimeZone('America/Los_Angeles')); // get current date
$m_date = $date->format('Y-m-d'); // set it in format I need for queries
$wow_date = $date->modify('-7 days'); // get 7 days before
$m_wow_date = $wow_date->format('Y-m-d'); // format earlier date 
以这样的方式回答:

$date = date('Y-m-d', strtotime('-7 days'));
或使用DateTime类:

$date = new DateTime('7 days ago');
echo $date->format('Y-m-d');

如果要使用面向对象的样式,请尝试以下方法

$date->sub(new DateInterval('P7D'));

这来自

您需要为应用程序配置默认时区

尝试在php.ini取消注释中找到它或添加以下行:

[Date]
; Defines the default timezone used by the date functions
date.timezone = "America/Los_Angeles"
或者在使用DateTime类之前通过php脚本:

date_default_timezone_set('America/Los_Angeles');

找到您想要的时区如果您的最终目标是一个字符串类型的变量,其中包含一周前的格式化日期,那么您可以在一行中完成这一切:-

$formattedDate = (new \DateTime())->modify('-7 days')->format('Y-m-d');
echo $formattedDate;

您不需要格式化任何内容。格式调用的输出被丢弃。此代码不会触发http 500。代码是正确的,应该是正确的work@Sven-我不清楚为什么。您能详细说明一下吗?如文档中所述,对
format
方法的调用将返回存储在对象中的日期的格式化字符串。它不存储该格式供以后使用。我想你不知道:文档在这里:我更喜欢使用DateTime类,但不知道为什么这种方法不起作用。使用DateTime版本编辑。我建议你设置默认时区。如果你在php上有机会,记得重新启动apache。ini@hek2mgl我不知道理解你的评论。参考手册是为了帮助john k找到他所在位置的时区名称。如果此配置无法解决问题,请发布错误输出。这不是时区问题。可能他的配置尚未设置。下面的代码需要$wow_date变量中的这个日期,并且这个代码输出HTTP500错误