【问题标题】:Generate start and end dates for each week of a year starting from any date with PHP使用 PHP 从任何日期开始为一年中的每个星期生成开始和结束日期
【发布时间】:2016-11-08 18:25:38
【问题描述】:

我最近遇到了一个应用程序https://entire.life,它显示了一个如下图所示的日历,其中显示了你生命中每一年的一行点。

点行宽 52 点,该行一年每周 1 个点。

每一行是一年。

每一行的第一个点周日期从您出生日期的那一周开始,而不是从一年的 1 月 1 日开始。因此,周点的行是从您的生日周开始和结束的每行 1 年。

下面的最后一张图片显示,位于今天日期未来的星期点显示为灰色点,表示这些星期尚未发生。

这是上图中的一个实时示例,可以看到 dit 的实际效果https://entire.life/jason-davis


https://i.stack.imgur.com/ne07D.png


下图显示了一个表单,用于为单击的当前周点添加事件。

https://i.stack.imgur.com/K5BUT.png


这张图片显示了未来日期的星期点是如何变灰的。

https://i.stack.imgur.com/pYGAn.png


问题

使用 PHP,我想根据用户的生日生成这样的日历,就像上面显示的应用一样。

这是上图中的一个实时示例,可以查看 dit 的实际效果https://entire.life/jason-davis

规则:

  • 生成一行代表一年中每周的点
  • 从用户出生日期年份开始,为 100 年的行生成一行上述周年点。
  • 每一行的起始周点应从用户出生日期的那一周开始,而不是从当年的 1 月 1 日开始。

使用 PHP 的 DateTime 函数,我如何根据用户的出生日期确定 52 周中每一周的开始和结束日期?

此处示例中的我的生日是 1983 年 4 月 21 日 第 1 年的周点表示基于该开始日期的这些日期:

第一行年份点
- 1983 年 4 月 21 日至 27 日 - 0 岁
- 1983 年 4 月 28 日至 5 月 4 日 - 0 岁
- 1983 年 5 月 5 日至 11 日 - 0 岁
- 1983 年 5 月 12 日至 18 日 - 0 岁
- 1983 年 5 月 19 日至 25 日 - 0 岁
- 1983 年 5 月 26 日 – 6 月 1 日 - 0 岁
- 1983 年 6 月 2 日至 8 日 - 0 岁
- 1983 年 6 月 9 日至 15 日 - 0 岁
- 1983 年 6 月 16 日至 22 日 - 0 岁
- 1983 年 6 月 23 日至 29 日 - 0 岁
- ...
- ... - ...
- 1984 年 3 月 29 日至 4 月 4 日 - 0 岁
- 1984 年 4 月 5 日至 11 日 - 0 岁
- 1984 年 4 月 12 日至 18 日 - 0 岁
- 1984 年 4 月 19 日至 20 日 - 0 岁

第二行年份点
- 1984 年 4 月 21 日至 27 日 1 岁 - 1984 年 4 月 28 日至 5 月 4 日 - 1 岁
- 1984 年 5 月 5 日至 11 日 - 1 岁
- 1984 年 5 月 12 日至 18 日 - 1 岁
- 1984 年 5 月 19 日至 25 日 - 1 岁
- 1984 年 5 月 26 日至 6 月 1 日 - 1 岁
- 1984 年 6 月 2 日至 8 日 - 1 岁
- 1984 年 6 月 9 日至 15 日 - 1 岁
- 1984 年 6 月 16 日至 22 日 - 1 岁
- 1984 年 6 月 23 日至 29 日 - 1 岁
- ...
- ...
- ...
- 1985 年 3 月 29 日至 4 月 4 日 - 1 岁
- 1985 年 4 月 5 日至 11 日 - 1 岁
- 1985 年 4 月 12 日至 18 日 - 1 岁
- 1985 年 4 月 19 日至 20 日 - 1 岁

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为它表明尝试解决问题的努力为零。基本上你是在问“你能为我写这段代码吗?”

标签: php datetime


【解决方案1】:

你去吧:

<?php 
   $userBirthDate = "1990-10-02"; // You probably use data from database or POST or GET, I setted a static one just for the example 
   $wishedDate = new DateTime($userBirthDate); // Here, you can add any desired date as an argument to DateTime, by default, it'll take the current DateTime.
   // This is for 100 years
   for ($x = 0; $x < 100; $x++){
     echo '<hr>'; // Just so every year will be separated by a html horizontal bar
     $limit = 52; // 52 for a year, but you could do as much as you need right there
     for ($i = 0; $i < $limit; $i++){
       echo $wishedDate->format('Y-m-d H:i:s'); // Write the current date
       echo '<br />'; // Just to switch line
       $wishedDate->modify('+1 week'); // Add one week to the wished date 
     }
   }
?>

【讨论】:

  • 这是我的荣幸!如果您觉得合适,请不要忘记接受答案:-)!
  • 您是否介意帮助进一步修改以现在采用这个并计数 100 年,所以基本上 100 行这个不断以这个速度计数?像这样entire.life/jason-davis
  • 当然我可以帮你解决这个 Jason,我会更新脚本来帮助你
  • 也许只是将$limit 增加到$limit * 100 将是答案,然后在每 52 之后添加代码以执行新行是解决方案
  • @JasonDavis 你去吧,我做了另一个循环 100 年,为了清楚起见,用 hr 分隔它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2022-01-23
  • 2012-08-19
  • 1970-01-01
相关资源
最近更新 更多