php 程序查找我的生日,其中日期名称为“星期一”再过100年
我出生于1986年4月21日,星期一。我的下一个生日(日期名称为“星期一”)是 1997 年 4 月 21 日,依此类推。
我编写了一个程序来查找最多 100 年,以查找我的生日与匹配的日期名称(星期一)是哪一年。
这是代码:
<?php
date_default_timezone_set('Asia/Calcutta');
for($year = 1986; $year < 2086; $year++) {
$timestamp = mktime(0, 0, 0, 4, 21, $year);
if(date('l', $timestamp) == 'Monday') {
echo date('Y-m-d, l', $timestamp) . "\n";
}
}
?>
这是程序的输出:
1986-04-21, Monday
1997-04-21, Monday
2003-04-21, Monday
2008-04-21, Monday
2014-04-21, Monday
2025-04-21, Monday
2031-04-21, Monday
2036-04-21, Monday
现在我的问题是为什么 PHP 不支持 1970 年之前和 2040 年之后。
那么如何才能得到2040年之后或1970年之前的生日呢?
I was born in 1986-04-21, which is Monday. My next birthday with day name "Monday" is 1997-04-21 and so on.
I wrote the program to find upto 100 year to find which year my birthday comes with matching day name that is monday.
This is the code:
<?php
date_default_timezone_set('Asia/Calcutta');
for($year = 1986; $year < 2086; $year++) {
$timestamp = mktime(0, 0, 0, 4, 21, $year);
if(date('l', $timestamp) == 'Monday') {
echo date('Y-m-d, l', $timestamp) . "\n";
}
}
?>
This is the output of the program:
1986-04-21, Monday
1997-04-21, Monday
2003-04-21, Monday
2008-04-21, Monday
2014-04-21, Monday
2025-04-21, Monday
2031-04-21, Monday
2036-04-21, Monday
Now my problem is why PHP is not supporting before 1970 and after 2040.
So how can I get the birthday after 2040 or before 1970?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
根本不需要使用任何特殊的日期处理类或函数。
您的生日在二月的闰日之后,因此从一年到下一年,生日会比一周中晚一天 (365 % 7) 或(在闰年)两天 (366 % 7)一年前。
该代码适用于任何版本的 PHP。
There's no need to use any special date processing classes or functions at all.
Your birthday is after the leap day in February, so from one year to the next it'll either be one day (365 % 7) or (on leap years) two days (366 % 7) later in the week than it was the year before.
This code will work on any version of PHP.
如果您使用的是 PHP 5.3,则可以使用
DateTime
类并添加DateInterval
s。它基于 64 位整数,并且不存在2038 年问题。基本示例:
有关
createFromDateString()
的文档位于此处。If you're on PHP 5.3, you can use the
DateTime
class and addDateInterval
s. It is based on 64-bit integers and doesn't have the year 2038 problem.Basic example:
documentation on
createFromDateString()
is here.要了解为什么不能前往 1970 年之前或 2038 年之后,请参阅日期手册:
For the reason why you can't go before 1970 or past 2038 see the date manual: