【发布时间】:2014-05-14 15:23:07
【问题描述】:
我在 PHP 手册页面上找到了以下计算东正教复活节日期的函数(来源:http://www.php.net/manual/en/function.easter-date.php)。
function easterOrthodox_date($year) {
$a = $year % 4;
$b = $year % 7;
$c = $year % 19;
$d = (19 * $c + 15) % 30;
$e = (2 * $a + 4 * $b - $d + 34) % 7;
$month = floor(($d + $e + 114) / 31);
$day = (($d + $e + 114) % 31) + 1;
$de = mktime(0, 0, 0, $month, $day + 13, $year);
return $de;
}
我正在使用以下行来获取某一年的此日期 (selYear):
$EasterOrth = date('Y-m-d', easterOrthodox_date($selYear));
当我在我的页面上回显结果时,这看起来是正确的并显示 2014-04-20(这是正确的,因为今年它与天主教复活节的日期相同)。
但是,当我将它用于其他计算时,它会返回错误的结果,例如12 月 31 日。 是否有可能在这种情况下我需要以不同的方式格式化才能获得格式为 yyyy-mm-dd 的日期?
更新: 上面的变量被传递给 SQL 中的存储过程,我在其中运行以下 Select(较长查询的一部分):
SELECT DATEADD(d, daysFromEaster, @EasterOrth) AS dayX,
category1,
category2,
'' AS validity
FROM DayCheck_Easter
WHERE mode = 'EasterOrth'
这应该只从模式设置为 EasterOrth 的表中获取项目,似乎问题出在我要添加天数 (int) 的第一行。 它在其他几个选择中运行良好,但在这里它计算了错误的日期,这就是为什么我认为我的格式错误,因此它不能被识别为日期。
谢谢,迈克。
【问题讨论】:
-
你能详细说明你在做什么,什么不工作吗?最后一句话似乎很重要,但不清楚你的意思。
-
“其他计算”究竟是什么?
-
date()接受任何整数并按指定格式对其进行格式化。如果你得到错误的日期,那么你做的日期数学错误,它可能是 a/b/c/d/e/month/day 的东西,而不是 mktime - 它也接受几乎任何整数并且尽力而为 -
我首先将存储过程排除在外。尝试各种值并简单地回显
$EasterOrth以查看结果是否符合您的预期。 -
我认为问题不在于您展示的任何 PHP 代码。它要么在其他 PHP 代码中,要么在您的存储过程中。您发布的函数似乎返回了不同年份的预期值。请参阅此示例:3v4l.org/nDEhr