Php 使用DateTime将日期设置为当前日期并对其进行修改
我试图1)将一个变量设置为当前日期2)将其格式化为Y-m-d,3)修改它以查找过去7天的日期 下面是我用来执行此操作的代码: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错误代码,并
$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错误