如何在父时间范围内获取子时间帧的开始日期

时间:2016-01-21 02:14:40

标签: php

我知道本月初的确切日期,但我需要知道本月的第一周何时开始,本周可以在本月之外开始。

我可以做点什么 - 找到工作日的时间" MONTH"开始并减去“周”和“34”开头的天数。 :

$weekday = d('w', $monthStartTimeStamp);
$weekStart = $monthStartTimeStamp - strtotime('1 day', 0) * (7 - $weekday);

问题:

是否有某种方法可以使这个计算在我事先不知道的时间范围内更通用?

可能的用例:

  1. 鉴于一些" DATETIME"获取第一个"年份"
  2. 的日期时间
  3. 鉴于一些" DATETIME"获取第一个" MONTH"
  4. 的日期时间
  5. 鉴于一些" DATETIME"得到第一个" WEEK"
  6. 的日期时间
  7. 鉴于一些" DATETIME"获取第一个" DAY"
  8. 的日期时间
  9. 鉴于一些" DATETIME"获取第一个" HOUR"
  10. 的日期时间
  11. 鉴于一些" DATETIME"得到第一个" MINUTE"
  12. 的日期时间

    对于日期时间2016-01-10 10:30结果将是:

    1. 年份:2016-01-01 00:00
    2. 月:2016-01-01 00:00
    3. 周:2016-01-04 00:00
    4. DAY:2016-01-10 00:00
    5. HOUR:2016-01-10 10:00
    6. MINUTE:2016-01-10 10:30
    7. P上。 S.这里的大多数问题都指明了需要什么时间框架,例如"如何获得年初",他们没有回答如何在蚂蚁时间框架内做到这一点。

1 个答案:

答案 0 :(得分:1)

这是伪代码的一个想法:

  • 你已经拥有本周最难的案例
  • 其余:将日期转换为如下格式:YYYYMMDDHHmm,然后根据$ interval将正确的X字符更改为0:

`

$int2char = array(
    'YEAR' => 8,
    'MONTH' => 6,
    'DAY' => 4,
    'HOUR' => 2,
    'MINUTE' => 0
);

$interval = 'MONTH';
$str = date("YmdHi", $timestamp);
$zeros = $int2char[$interval];
$d = substring($str, 0, 12-$zeros) . substring("00000000", 0, $zeros);
$date = DateTime::createFromFormat('YmdHi', $d);
echo $date->format('Y-m-d H:i');

`