首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的问题: PHP今年返回错误的复活节日期

奇怪的问题: PHP今年返回错误的复活节日期
EN

Stack Overflow用户
提问于 2021-01-28 11:24:43
回答 2查看 671关注 0票数 0

我需要今年的复活节日期。今年的复活节2021年将在4月4日(星期日)的上举行。

但是当我运行echo date('Y-m-d',easter_date(2021));时,PHP会返回:

代码语言:javascript
复制
2021-04-03

那件事怎么可能?怎么了?

EN

回答 2

Stack Overflow用户

发布于 2021-01-28 12:06:37

摘自PHP手册:链接

注意: easter_date()依赖于系统的C库时间函数,而不是使用PHP的内部日期和时间函数。因此,easter_date()使用TZ环境变量来确定它应该在其中操作的时区,而不是使用PHP的默认时区,这可能会导致与PHP中的其他日期函数一起使用此函数时的意外行为。作为解决办法,您可以使用easter_days()与DateTime和DateInterval一起计算PHP时区中复活节的开始时间,如下所示:

代码语言:javascript
复制
<?php
function get_easter_datetime($year) {
    $base = new DateTime("$year-03-21");
    $days = easter_days($year);

    return $base->add(new DateInterval("P{$days}D"));
}

foreach (range(2015, 2022) as $year) {

    printf("Easter in %d is on %s\n",
           $year,
           get_easter_datetime($year)->format('D F j'));
}

结果

代码语言:javascript
复制
PHP 8.0.1
Easter in 2015 is on Sun April 5
Easter in 2016 is on Sun March 27
Easter in 2017 is on Sun April 16
Easter in 2018 is on Sun April 1
Easter in 2019 is on Sun April 21
Easter in 2020 is on Sun April 12
Easter in 2021 is on Sun April 4
Easter in 2022 is on Sun April 17
票数 2
EN

Stack Overflow用户

发布于 2021-01-28 19:16:52

一种更灵活的方法是使用复活节方法。

代码语言:javascript
复制
echo dt::Easter(2021)->format('l, j F Y');
//Sunday,4 April 2021

//Orthodox Easter 2021
echo dt::Easter(2021,dt::EASTER_EAST)->format('l, j F Y'); 
//Sunday, 2 May 2021

Easter方法是此PHP类的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65936161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档