【问题标题】:How to get start date of child time frame within parent time frame如何在父时间范围内获取子时间范围的开始日期
【发布时间】:2016-01-21 02:14:39
【问题描述】:

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

我可以做类似的事情 - 找到“MONTH”开始的工作日并减去“WEEK”开始的天数:

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

问题:

对于我事先不知道的时间范围,有什么方法可以使这个计算更通用?

可能的用例:

  1. 给定一些“DATETIME”获取第一个“YEAR”的日期时间
  2. 给定一些“DATETIME”获取第一个“MONTH”的日期时间
  3. 给定一些“DATETIME”获取第一个“WEEK”的日期时间
  4. 给定一些“DATETIME”获取第一个“DAY”的日期时间
  5. 给定一些“DATETIME”获取第一个“HOUR”的日期时间
  6. 给定一些“DATETIME”获取第一个“MINUTE”的日期时间

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

  1. 年份 : 2016-01-01 00:00
  2. 月 : 2016-01-01 00:00
  3. 周 : 2016-01-04 00:00
  4. 日期:2016-01-10 00:00
  5. 时间:2016-01-10 10:00
  6. 分钟:2016-01-10 10:30

P。 S. 这里的大多数问题都详细说明了所需的确切时间范围,例如“如何获得年初”,他们没有回答蚂蚁时间框架如何做到这一点。

【问题讨论】:

  • 我很确定您必须针对每种可能的情况“手动”执行此操作,因为它们在很多方面都存在差异

标签: php


【解决方案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');

`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多