【问题标题】:Getting start date and end date of a week within month start and month end获取月份开始和月份结束内一周的开始日期和结束日期
【发布时间】:2016-11-14 18:53:07
【问题描述】:

我有一个程序可以在传递年份和周数时获取一周的开始日期和结束日期。以下是代码。

function getStartAndEndDate($week, $year) {
  $dto = new DateTime();
  $dto->setISODate($year, $week,0);
  $ret['week_start'] = $dto->format('Y-m-d');
  $dto->modify('+6 days');
  $ret['week_end'] = $dto->format('Y-m-d');
  return $ret;
}

$week_array = getStartAndEndDate(5,2017);
print_r($week_array);

这将输出结果为

Array ( [week_start] => 2017-01-29 [week_end] => 2017-02-04 )

但我需要把一周分成两部分。例如,结果应如下所示

Array ( [week_start] => 2017-01-29 [week_end] => 2017-01-31)
Array ( [week_start] => 2017-02-01 [week_end] => 2017-02-04)

这意味着我需要不同月份的单独值。任何帮助将不胜感激。

【问题讨论】:

  • week ends 怎么能在 2 days
  • 实际上这一周并没有结束。如果日期在不同月份,我需要将同一周分成两个。

标签: php mysql date


【解决方案1】:

您按月比较两个日期并使用't' 格式来获取该月的最后一天。关注description of date() function ,详细了解所有可用格式和以下示例。

除非你真的需要可变版本,否则最好使用DateTimeImmutable 而不是DateTime

function getStartAndEndDate($week, $year)
{
    $dto = (new DateTimeImmutable())->setISODate($year, $week, 0);
    $weekStart = $dto;
    $weekEnd = $dto->modify('+6 days');

    $ret = [];
    if ($weekStart->format('m') === $weekEnd->format('m')) {
        $ret[] = [
            'week_start' => $weekStart,
            'week_end' => $weekEnd,
        ];
    } else {
        $ret[] = [
            'week_start' => $weekStart->format('Y-m-d'),
            // 't' = the last day of the month.
            'week_end' => $weekStart->format('Y-m-t'),
        ];

        $ret[] = [
            // The first day of the month.
            'week_start' => $weekEnd->format('Y-m-01'),
            'week_end' => $weekEnd->format('Y-m-d'),
        ];
    }

    return $ret;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多