【问题标题】:Getting first day of the month, is outputting the wrong first day of the month获取当月的第一天,输出错误的第一天
【发布时间】:2019-05-31 20:38:32
【问题描述】:

我想以“星期几”格式显示每月的第一天。 例如,下面的代码应该选择 8 月,并说 01 周的哪一天是星期四,但是由于某种原因,下面的代码输出了错误的星期五,在某些月份,例如五月,它正确地显示为星期三.

$monthNumber = 3;
$base = strtotime(date('Y-m',time()) . '-01 00:00:01');
$dateTest = date("Ym" . 1, strtotime($monthNumber . " month", $base));
$unixTimestamp = strtotime($dateTest, $base);
echo date("l", $unixTimestamp);

有没有人想办法让它显示正确的日期?

$base 修复了一个错误,它没有显示正确的月份。

【问题讨论】:

  • 如果您的目标是 8 月,不应该 $monthNumber = 8 吗?
  • @Woodrow 它的工作方式是 $monthNumber 是添加到当前月份的月份数。第 3 行的正常前缀是 strtotime("3 month", $base) 3 可能是 -2 距离当前月份 2 个月
  • 啊,明白了。感谢您的澄清!

标签: php date strtotime


【解决方案1】:

为什么不使用 dateTime?

echo (new \DateTime('first day of august 2019'))->format('l');

阅读更多关于Relative formats的信息。

【讨论】:

    【解决方案2】:

    你必须首先使用 date():

    $base = date('Y-m',time()) . '-01 00:00:00';
    

    而且不必设置第一秒 :)

    【讨论】:

      【解决方案3】:

      要使一周中的某一天落在任何一个月的第一天,您可以使用前缀 first day of 例如

      echo (new \DateTime('first day of August'))->format('l');
      

      这将正确显示 2019 年 8 月的星期四。

      如果您想使用数月的数字动态执行此操作,您可以创建一个虚拟日期,就像您尝试做的那样。

      $timeString = sprintf('01.%02d.%04d', 8, 2019); // replace the numbers with your variables
      echo (new \DateTime($timeString))->format('l');
      

      【讨论】:

        猜你喜欢
        • 2014-03-22
        • 2013-10-29
        • 1970-01-01
        • 2017-01-09
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 2013-02-14
        相关资源
        最近更新 更多