PHP 和 MySQL 的最小和最大日期

11

PHP和MySQL能够识别的最大日期是多少?

我的意思是,我有不同时间轴的不同值,并且我想使它们都成为MySQL中的BETWEEN选择,像这样:

SELECT * FROM table WHERE date BETWEEN '2011-10-01' AND '2011-10-02';
SELECT * FROM table WHERE date BETWEEN '2011-10-03' AND '2011-10-10';
为了获取所有选项,我在考虑像这样的方式:

等等。

SELECT * FROM table WHERE date BETWEEN '0000-01-01' AND '2011-10-01';
SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10';
SELECT * FROM table WHERE date BETWEEN '2011-10-11' AND '9999-12-31';

这个代码会一直有效吗?还是存在某些可能导致代码出错的风险?


是的,但限制也是从 1970-01-012038-01-19 吗? - Peon
为什么不使用小于号和结束日期,而不是使用between? - WayneC
@WayneC 有什么区别? - Peon
不太确定你想要实现什么。 - WayneC
6个回答

29
日期类型(DATE)
DATE类型用于存储只有日期部分而没有时间部分的值。 MySQL以“YYYY-MM-DD”格式检索和显示DATE值,支持的范围为“1000-01-01”到“9999-12-31”。
取自http://dev.mysql.com/doc/refman/5.5/en/datetime.html

谢谢,伙计,那正是我所需要的。我也看了文档,但可能不小心跳过了那部分。 - Peon
@DainisAbols 酷啊,谷歌也是我的伙伴... :) - jtheman

11

下面是不同的日期范围,取决于你的列类型:

根据文档

DATE类型用于只包含日期部分而没有时间部分的值。MySQL以“YYYY-MM-DD”格式检索和显示DATE值。支持的范围为“1000-01-01”至“9999-12-31”。

DATETIME类型用于同时包含日期和时间部分的值。MySQL以“YYYY-MM-DD HH:MM:SS”格式检索和显示DATETIME值。支持的范围为“1000-01-01 00:00:00”至“9999-12-31 23:59:59”。

TIMESTAMP数据类型用于同时包含日期和时间部分的值。TIMESTAMP具有从“1970-01-01 00:00:01” UTC到“2038-01-19 03:14:07” UTC的范围。


2

MySQL的DATETIME类型支持从"1000-01-01"到"9999-12-31"。这应该是足够的。

PHP也可以分析它们;它们不是两位数的年份,所以很好。我刚刚在"9999-01-01"上运行了strtotime,它可以工作。


1

你能像这样做吗:

SELECT * FROM table WHERE date < '2011-10-01';
SELECT * FROM table WHERE date BETWEEN '2011-10-02' AND '2011-10-10';
SELECT * FROM table WHERE date > '2011-10-11' 

0

日期不过是整数。整数大小取决于系统;即32位、64位等。

在php中,可以使用常量PHP_INT_SIZE确定整数大小,并使用常量PHP_INT_MAX确定最大值。

在mysql中,您可以执行以下操作: SELECT ~0 as max_bigint_unsigned


-2

可能先从您的表中获取最大值和最小值:

SELECT * FROM table WHERE date BETWEEN (SELECT MIN(date) FROM table) AND (SELECT MAX(date) FROM table)

不完全是我所询问的。 - Peon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接