【问题标题】:PHP Strtotime erratic functionPHP Strtotime 不稳定函数
【发布时间】:2011-03-30 13:27:09
【问题描述】:

下面的代码应该取二月的第四个星期五和四月的第四个星期五并返回。

$datei1 = date(strtotime('fourth friday', strtotime('february', strtotime(date('01-m-Y')))));

$datei2 = date(strtotime('fourth friday', strtotime('april', strtotime(date('01-m-Y')))));

它的工作,但采取 4 月的第 5 个星期五而不是第四个。我只能假设它不相信四月一日算数。

任何想法,

太棒了

【问题讨论】:

  • 拼写为“fourth”,而不是“forth”。确保它在您的代码中拼写正确。这些换行符可能没有多大帮助。
  • 能否请您说明您的操作系统发行版和 PHP 版本
  • PHP 在 c_panel 上说版本 5 就是这样
  • 您可以使用echo phpversion() 显示 PHP 中的 PHP 版本。

标签: php strtotime


【解决方案1】:

您的代码无缘无故地非常复杂。试试这个(PHP 5.3):

$date = date('Y-m-d', strtotime('fourth friday of april 2011'));

这会给你:

2011-04-22

在 PHP 5.2 中,这种语法似乎适用于所有情况:

$date = date('Y-m-d', strtotime('fourth friday', strtotime('april - 1 second')));

【讨论】:

  • @Tomalak Geret'kal:这是 5.3 的语法。 OP 没有提到版本,所以我假设他使用的是最新版本。
  • 不能在我们的服务器上工作,但一般来说我们不希望这样,因为它应该在 2012 年 2013 年等自动更新......
  • @Robin 我希望重点是您应该从 now() 生成“April 2011”,然后使用它......不过,您似乎使用的是 5.3 之前的 PHP 版本,因此@Tomalak 已经(心理上!)解决了,这对你不管用。
  • 您可以改用strtotime('fourth friday of april this year'),这会产生正确的输出strtotime('fourth friday of april')
  • @Matt,@Tom 发现它不适用于他安装的 php,因为 Matt 和我自己已经“(心理上!)解决了”这对我们有用。因此,如果没有关于@Robin 安装的更多信息,您不能肯定地说如果正确执行这将不起作用
【解决方案2】:

strtotime('fourth friday', $now) 可能真的意味着“相对于$now 的第四个星期五”。

您提供的 $now 参数是 2011 年 4 月 1 日,即星期五。 4 月 1 日星期五之后的第四个星期五是该月的第五个星期五。

【讨论】:

  • 听起来不错。如果你想要 2011 年 4 月的第四个星期五,试试strtotime('fourth friday of April 2011'); :)
  • 您能详细说明一下吗?我在发布之前尝试过它,它对我有用。有什么棘手的事情吗?
  • 可能值得阅读 strtotime (au2.php.net/manual/en/function.strtotime.php) 的更改日志。 php 版本 5.0.2 和 5.2.7 中 strtotime 的功能发生了重大变化
  • xzyfer 说了什么。原来它只适用于 5.3,并且 codepad.org 运行 5.2.5。 netcoder 为 5.2.* 发布了一个很好的解决方法。
【解决方案3】:

看来您使用的是旧版本的 PHP。已引入重大更改来处理您在此处遇到的边缘情况。在这种情况下,我认为以下是最干净的方法:

echo date('Y-m-d', strtotime('+4 fridays', mktime(0,0,0,4,0,date('Y'))));
// or
echo date('Y-m-d', strtotime('fourth friday', mktime(0,0,0,4,0,date('Y'))));

这应该是今年 4 月的第四个星期五。我已在 5.3 中成功测试,但您必须在较旧的安装上进行测试。

【讨论】:

    【解决方案4】:

    PHP 更新日志 ::

    5.2.7 在 5.2.7 之前的 PHP 5 中,如果该工作日是该月的第一天,则请求该月中给定工作日的给定事件会错误地将一周添加到返回的时间戳。这已在 5.2.7 及更高版本中得到纠正。

    【讨论】:

    • 我已经在 cmets 中发布了这个。你能echo phpinfo(); 告诉我们你使用的确切版本吗
    • 完成 PHP 版本 5.2.14 。我刚刚向房东发送了一封电子邮件以进行升级。有没有其他的升级方式?
    • 5.2.14 应该没有这个问题
    • 它在更新日志中说这个错误直到没有更正。 5.2.7 .确切的问题记录在案
    • 是的,但是 5.2.14 > 5.2.7 因此到那时问题应该已经得到纠正。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多