【发布时间】:2011-11-28 16:27:29
【问题描述】:
我正在寻找添加日期/时间的标准。我一直找不到。特别是,我希望找到一个规范来定义当您将一个月添加到像 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
【问题讨论】:
-
地狱基本上有两种:编码地狱和日期时间地狱。
-
我认为一个准标准存在于任何一个古老的(Unix?)库中定义
strtotime()对+1 week的解析等等。可悲的是,这个基本功能的文档非常少。我想知道是否值得向 PHP 之外的更多标签打开这个问题? Jon Skeet 可能会添加一两件事,他has been dealing with Date/Time libraries in the past。事实上,我想我会 ping 他。 -
@Pekka IIRC PHP 为此使用了一次 gnutime(),但 Derick 已经重写了代码。
-
@Pekka 在这种情况下,我正在比较“+1 月”和 MySQL 的 DATE_ADD(timestamp, INTERVAL 1 MONTH),它们不同。
标签: php mysql oracle datetime standards