Php 时间戳计算的奇怪结果

Php 时间戳计算的奇怪结果,php,time,Php,Time,我正在使用php时间戳开发事件日历页面 在“日历”页面上,我编写了一个函数来立即确定一些事项,例如: 用户选择的月份(默认为当前时间戳的月份) 当月的第一天(按此确定): 现在-使用每月的第一天,我必须确定该天之前的最近一个星期日(日历从星期日开始),因此我将其运行如下: date('m/d/Y--D-w',($first_of_month - (date('w',$first_of_month)*86400))) 问题是它没有返回我所期望的 目前我们在2016年4月。运行日期('w')格

我正在使用php时间戳开发事件日历页面

在“日历”页面上,我编写了一个函数来立即确定一些事项,例如:

  • 用户选择的月份(默认为当前时间戳的月份)
  • 当月的第一天(按此确定):
现在-使用每月的第一天,我必须确定该天之前的最近一个星期日(日历从星期日开始),因此我将其运行如下:

date('m/d/Y--D-w',($first_of_month - (date('w',$first_of_month)*86400)))
问题是它没有返回我所期望的

目前我们在2016年4月。运行日期('w')格式时,4月1日返回5。所以,从周五开始的5天应该是第0天(周日)。但是我星期六有空


我在这里遗漏了什么?

1小时的偏移量是否会让你超过午夜(直到明天)?我建议您仔细检查服务器偏移量:
date\u default\u timezone\u get()

如果错误,请使用
日期\u默认\u时区设置('America/Los\u Angeles')
(显然应酌情替换'America/Los\u Angeles'

只要这是正确的,您就可以使用on
$first\u of_month
获得最后一个星期日:

date('m/d/Y--D-w' ,strtotime('last Sunday',$first_of_month));

PHPs日期字解析器功能非常强大。如果您正在查找上个月的最后一个星期日,您可以直接询问

$date = new DateTime();
if($date->format('w') != 0) {
    $date->modify('last Sunday of last month');
}

请参见此处的ideone:

感谢编辑Robbie-无法使代码高亮器正常工作…确定服务器时区无问题-列表中的问题很棘手;)服务器比本地服务器晚了一个小时,但正如我所说,日期('w')返回5,(星期五),因此,第一天-(5×86400)我希望周六回来。如果我在上个月的最后一个星期日之后,这将非常有用-但是如果一个月的第一个星期日在星期日到达,我希望修改为:first_day-(0*86400)。这意味着它会自动返回。你可以用一个简单的条件来包装它。查看我的更新答案。优雅的解决方案和时区应该无关紧要,因为在我设置的原始时间(月的第一个月)中,我截断时间戳,只使用日期。谢谢你的回答。
$date = new DateTime();
if($date->format('w') != 0) {
    $date->modify('last Sunday of last month');
}