【问题标题】:PHP DateTime - Make from YEAR, WEEK and WEEKDAYPHP DateTime - 由 YEAR、WEEK 和 WEEKDAY 创建
【发布时间】:2014-10-30 11:04:06
【问题描述】:

我将年、周和工作日存储为整数。工作日从 0 开始,从星期一开始。这些变量等价于 MySQL 中的 YEAR(date)、WEEK(date) 和 WEEKDAY(date, 1) 函数。例如,对于今天(2014 年 10 月 30 日星期四),它将是:

$year = 2014;
$week = 44;
$weekday = 3; // Thursday

如何使用这些变量设置 DateTime 对象的日期?

我尝试使用:

DateTime::createFromFormat("Y-z", $year . "-" . ((($week - 1) * 7) + $weekday));

还有其他一些变化,但没有给我预期的结果。

有什么想法吗?

【问题讨论】:

  • 首先,您为什么不在日期时间列中存储日期?
  • 没有像这样存储在 MySQL 中,我只是将 MySQL 函数作为我所拥有的变量(实际上是方法参数)的示例。请参阅下面的解决方案。

标签: php date datetime


【解决方案1】:

在我看来,您好像需要使用\DateTime::setISODate()。但是,您需要将工作日加 1,因为星期一是 1。

$date = (new \DateTime())->setISODate($year, $week, $weekday + 1);
var_dump($date);

http://3v4l.org/EVqHj

【讨论】:

    【解决方案2】:

    这个解决方案:

    $year = 2014;
    $week = 44;
    $weekday = 3; // Thursday
    
    $day_in_question = new DateTime();
    $day_in_question->setTime(0, 0, 0);
    $day_in_question->setISODate($year, $week_number, $weekday + 1);
    

    似乎给出了预期的结果

    希望对某人有所帮助

    【讨论】:

      猜你喜欢
      • 2014-12-20
      • 2015-07-31
      • 2020-04-17
      • 2021-11-20
      • 1970-01-01
      • 2016-10-09
      • 1970-01-01
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多