PHP日期问题解决方法

4

我正在尝试基于今天的日期(2012年8月24日)计算以下三个值:

  1. 本月第一个星期六的日期。
  2. 本月第三个星期六的日期。
  3. 下月第一个星期六的日期。

以下是我在PHP脚本中的实现方式:

// Returns August 2012
$this_month = date("F Y");

// Returns September 2012
$next_month = date("F Y", strtotime("next month"));

// Returns August 04th, Saturday
$t_sat_1st=date('U', strtotime($this_month.' First Saturday'));

// Returns August 18th, Saturday
$t_sat_3rd=date('U', strtotime($this_month.' Third Saturday'));

// Returns September 08th, Saturday
$n_sat_1st=date('U', strtotime($next_month.' First Saturday') );

为什么最后一行代码返回的日期不正确?我期望它返回2012年9月1日。我的代码有什么问题吗?


它实际上返回了什么? - Lucas
改为2012年9月1日? - Lucas
@think123 它返回了2012年9月8日。 - 0x4B1D
请尝试在您的日期格式中使用o而不是Y。我假设您已经查看了这个链接,但也许没有?https://dev59.com/fVDTa4cB1Zd3GeqPImGS - jeremy
@Nile 使用 o,不幸的是什么也没发生。 - 0x4B1D
显示剩余3条评论
1个回答

2
我不知道为什么你的代码不能正常工作,可能是解析方式的问题。但是请尝试:
$n_sat_1st=date('U', strtotime('first saturday of ' . $next_month) )

注意,'of'是必需的。 这段代码仅适用于5.3及以上版本。
据称,显然这些字符串中的一些仅在PHP 5.3中有效,特别是“本月第一天”和“本月最后一天”等。根据在另一个网站上找到的信息,“xxx日”功能是在PHP 5.3中添加的。
在此页面上发表评论-http://www.php.net/manual/en/datetime.formats.relative.php 我已在Windows和Ubuntu上测试了php 5.3和5.4,它都可以正常工作。
如果这不起作用,请尝试这个。
 $d = new DateTime($next_month);
 $d->modify('first saturday of this month');
 echo $d->format('U');

1
我认为 of 是多余的。 - jeremy
当我使用 of 时,返回的日期为12月31日。如果我像 @Nile 建议的那样删除 of ,我仍然会得到9月8日。 - 0x4B1D
1
我已经平衡了,认为 DV 不是必要的。 - jeremy
我已经利用另一种解决方案更新了我的代码,这是否有效?还有你正在使用哪个PHP版本? - Kris
1
如果您查看http://www.php.net/manual/en/datetime.formats.relative.php上的最后一条评论,它说其中一些格式是在5.3中新增的。因此,也许这个格式在5.2中不存在。 - Kris
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接