gpt4 book ai didi

php - 添加日期/时间的标准?

转载 作者:IT老高 更新时间:2023-10-29 00:03:58 26 4
gpt4 key购买 nike

我正在寻找添加日期/时间的标准。我一直找不到。特别是,我希望找到一个规范来定义当您将一个月添加到像 1 月 31 日这样的日期时会发生什么。正确答案是 2 月 28 日(/29 日)吗? 3月1日? 3 月 2 日?

我看到不同工具(在本例中为 PHP 和 MySQL)之间的实现不一致,我正在尝试找到某种标准来作为我工作的基础。

不同的结果:

PHP

$end = strtotime("+1 month", 1314835200);
//1317513600 Sat, 01 Oct 2011 20:00:00 -0400

MySQL

SELECT UNIX_TIMESTAMP(DATE_ADD(FROM_UNIXTIME(1314835200), INTERVAL 1 MONTH));
#1317427200 Fri, 30 Sep 2011 20:00:00 -0400

甲骨文

SELECT ADD_MONTHS('31-Aug-11', 1) FROM dual;
#30-SEP-11

(对不起格式更改,我的 oracle foo 很弱)

Java

Calendar c = Calendar.getInstance();
c.clear();
c.set( 2011, Calendar.AUGUST, 31 );
c.add( Calendar.MONTH, 1 );
c.getTime()
#Fri Sep 30 00:00:00 EDT 2011

最佳答案

根据 POSIX.1-2001 标准,下个月(如在调用 mktime 之前递增 tm_mon)通过调整值直到它们适合来完成。因此,例如,从 2001 年 1 月 31 日开始的下个月是 2001 年 3 月 3 日。这是因为 31 的 tm_mday 与 1 的 tm_mon 无效(二月) ,因此它被标准化为 2(三月)的 tm_mon 和 3 的 tm_mday

从 2000 年 1 月 31 日开始的下个月是 2000 年 3 月 2 日,因为那年二月有 29 天。从一月开始的下一个月,1 2038 不存在,视情况而定。

The great thing about standards is there are so many to chose from .查看 SQL 标准,我敢打赌您会发现 next month 的不同含义。我怀疑 ISO 8601 可能会给您另一种选择。重点是,有许多不同的行为,“下个月”的含义是非常特定于领域的。

编辑:我认为我发现 SQL-92 是如何处理它的,显然要求从 1 月 31 日开始的下个月是一个错误。

链接:

关于php - 添加日期/时间的标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7614361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com