【问题标题】:Get date of Monday in current week in PHP 4 [duplicate]在PHP 4中获取本周星期一的日期[重复]
【发布时间】:2011-02-26 20:24:36
【问题描述】:

我需要找到本周的星期一的日期。如何在 PHP 4 中做到这一点?

【问题讨论】:

  • 我真的觉得你必须在 PHP4 中工作,因为 PHP5 的日期功能waaaay 更好。此外,PHP4 已经正式报废了一段时间,所以它不会再获得任何补丁,而且它可能是不安全的——它不应该再用于生产了。

标签: php date php4


【解决方案1】:

最简单的方法:

$time = strtotime('monday this week');

【讨论】:

  • 哈!当他们say“将任何英文文本日期时间描述解析为 Unix 时间戳”时,他们真的是认真的,不是吗? +1 最易读的解决方案。
  • +1!真的很容易解决。很高兴我找到了这个,因为我已经在建造一些精心设计的建筑来确定星期一的日期。拼写错误:strotime 应该是 strtotime
  • 今天是星期四 2012/05/17 (Y-m-d),当我做 echo(date('Y-m-d', strtotime('monday this week')));它去 2012/05/21,也就是下周的星期一
  • 我认为“本周星期一”实际上是下星期一......“上星期一”对我有用
  • 下周一:echo date('Y-m-d', strtotime('next monday'));
【解决方案2】:

试试这个:

return strtotime('last monday', strtotime('next sunday'));

【讨论】:

  • 如果今天是星期天呢? :)
  • @mr.b - 那么它仍应按预期运行(假设星期日是一周的开始)
  • 这是我最喜欢的周一 00:00:00 的解决方案。另一种(不太优雅)的方法是mktime(0,0,0,date('m'),date('j')-date('N')+1,date('Y'))
【解决方案3】:
echo date('Y-m-d',time()+( 1 - date('w'))*24*3600);

下周:

echo date('Y-m-d',time()+( 8 - date('w'))*24*3600);

1 代表星期一,2 代表星期二,3 代表星期三,以此类推。试一试。

【讨论】:

  • 1 代表星期一、2 星期二、3 星期三等等 :) 试一试..
  • 如果您在周日尝试此代码,这不会给出上周一!
  • @Royertan 是对的!我正在使用dhtmlxSchedule,今天是星期天,前一个星期一的数据消失了,实际上是整个星期!有什么建议吗?
  • @Waiyl Karim 这也许有帮助! $sunday = date('Y-m-d', strtotime('上周日')); $convertSunday = strtotime($星期日); $nextSunday = strtotime("+7 day", $convertSunday);
【解决方案4】:
echo date('Y-m-d', strtotime('previous monday'));

不过,只有一个音符。你要确保今天不是星期一,否则你会得到上一个星期一的日期,就像它说的那样。你可以这样做

if (date('w') == 1)
{
    // today is monday
}
else
{
    // find last monday
}

【讨论】:

  • 如果今天是星期一,这将给出一周前的日期。
  • @nickf:查看更新的答案。我记得在我发帖后.. :)
  • 小心你在 strtotime 中使用的措辞,'previous monday' 会得到你一周前的星期一,当你真的想要今天的时候。 IIRC,本周在 php 中意味着星期一到星期日,但是如果您将答案应用于查找星期二的日期,那么这将在星期一和星期二给您错误的结果。
  • @Kevin:我不确定我是否在关注你。我相信,previous 和 ... last 之间到底有什么区别?
【解决方案5】:

$thisMonday = date('l, F d, Y', time() - ((date('w')-1) * 86400) );

编辑:解释

  • date('w') 是星期几的数字表示(0=星期日,6=星期六)
  • 一天有86400秒
  • 我们取当前时间,然后减去(一天 *(星期几 - 1))

所以,如果现在是星期三(第 3 天),星期一是两天前:

time() - (86400 * (3 - 1)) = time() - 86400 * 2

如果是星期一(第 1 天),我们得到:

time() - (86400 * (1 - 1)) = time() - 86400 * 0 = time()

如果是星期天(第 0 天),星期一就是明天。

time() - (86400 * (0 - 1)) = time() - -86400 = time() + 86400

【讨论】:

    【解决方案6】:

    试试这个。

    echo date('Y-m-d', strtotime('last monday', strtotime('next monday')));
    

    如果今天是星期一,它将返回当前日期,否则返回上星期一。至少在 en_US 语言环境下的 PHP 5.2.4 上是这样。

    【讨论】:

      【解决方案7】:

      试试这个

      $day_of_week = date("N") - 1; 
      $monday_time = strtotime("-$day_of_week days");
      

      【讨论】:

        【解决方案8】:

        我的尝试:

        <?php
        $weekday = date("w") - 1;
        if ($weekday < 0)
        {
            $weekday += 7;
        }
        echo "Monday this week : ", date("Y-m-d",time() - $weekday * 86400) , "\n";
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-27
          • 2014-07-24
          相关资源
          最近更新 更多