【问题标题】:Computing relative dates in php using strtotime()使用 strtotime() 在 php 中计算相对日期
【发布时间】:2012-06-13 19:56:22
【问题描述】:

我正在寻找一种可靠的方法来返回当前周的指定工作日(例如“星期一”)的完整日期。

由于今天是 2012 年 6 月 13 日,星期三,我预计 <?php echo date("Y-m-d", strtotime('Mon this week')); ?> 会导致 2012-06-11,但 php 却返回 2012-06-18,就好像它将 本周 解释为意味着 下周。为什么会出现这种行为,我应该怎么做?

谢谢。

--杰夫

【问题讨论】:

  • 你如何定义“本周”?周一还是周日?周日到周六?周六到周五?或者完全是别的什么?
  • 有趣。我刚刚在 PHP5.4 下运行它,'Mon this week' 获得了第 11 名,'this Mon' 获得了第 18 名。你运行的是什么版本的 PHP?
  • 另外,我假设“一周”从星期日或星期一开始,因为 date() 格式为两者提供了选项
  • <?php echo date("Y-m-d", strtotime('last Mon',time())); ?> 怎么样?
  • 当您使用 DateTime 对象时,它是否给出相同的错误日期?例如$d=new DateTime('Mon this week'); echo $d->format('Y-m-d');

标签: php strtotime


【解决方案1】:

date( 'Y-m-d', strtotime( 'last Monday', strtotime( 'Sunday' ) ) );

这会搜索下周日之前的周一。

【讨论】:

    【解决方案2】:

    根据文档php relative date formats

    那么Monday this week会先前进到next Monday再处理this week的相关文本。

    dayname:移动到该名称的下一天,除非是当天,否则不会前进。换句话说,如果当前日期是 6 月 11 日,那么 strtotime('Monday this week') 将返回 6 月 11 日,而如果当前日期是 6 月 13 日,那么 strtotime('Monday this week') 将返回 6 月 19 日。

    【讨论】:

      【解决方案3】:

      我认为这是解决您问题的方法:

      $monday_date = date("Y-m-d", mktime(0,0,0, date("m"), date("j")-(date("w")+1), date("Y")));
      

      【讨论】:

        猜你喜欢
        • 2010-09-05
        • 1970-01-01
        • 2011-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-20
        • 2012-03-14
        相关资源
        最近更新 更多