PHP/MySQL/JavaScript的mindate和maxdate

7
在 .net 中,有静态属性 DateTime.MinDate 和 DateTime.MaxDate,方便地返回 DateTime 对象的最小和最大有效日期。
我现在涉猎 Web 编程,使用 php + mysql + javascript。在这种编程环境中似乎没有同样方便的 min/max date 值?例如,mysql 中日期对象的最大值是 9999-12-31,但是 php 函数 strtotime() 不喜欢那个值。
我想要一个跨语言的最小日期(例如用于表示“尚未设置”),以及一个跨语言的最大日期(例如用于表示“永久有效”)。这意味着可以在数据库中存储这些 min/max dates,php 将检索它们(并且必须区分“正常”日期和 min/max date),最终它们将传递到某些 javascript 中(再次需要区分“正常”日期和 min/max date)。
因此,在 php + mysql + javascript 中工作时,您会使用哪个日期值作为 min/max dates?如何存储这些常量——只定义一次并使其在 php + mysql + javascript 中可用会很好...
谢谢
3个回答

12

对于 JavaScript 方面,范围要大得多

日期是以自协调世界时 1970 年 1 月 1 日午夜起始的毫秒数。一天有 86,400,000 毫秒。日期对象范围是相对于 UTC 1970 年 1 月 1 日的 -100,000,000 天到 100,000,000 天之间。

因此,你可以在 JavaScript 中这样做:

var min_date = new Date(-100000000*86400000);
var max_date = new Date( 100000000*86400000);   

1
你的 8640000000000000 常量是完全正确的;再加 1 就会导致日期在两个方向上无效。 - Ed Bayiates
1
PS:JavaScript开发人员必须注意时区差异,以创建和获取日期。 - Hitesh Chavda

2
我将只回答关于PHP的部分问题。根据PHP date()文档,时间戳的有效范围通常为从1901年12月13日20:45:54 GMT到2038年1月19日03:14:07 GMT(这些日期对应着32位有符号整数的最小值和最大值)。
PHP使用32位整数值来表示日期/时间,这意味着您可以使用PHP_INT_MAX常量来推导与最小/最大日期相关的整数值:
echo date('m/d/Y G:i:s', PHP_INT_MAX + 1); // minimum valid date
echo date('m/d/Y G:i:s', PHP_INT_MAX); // maximum valid date

输出:

1901年12月13日 15:45:52

2038年01月18日 22:14:07

不确定为什么最小日期会慢两秒,但您可以得到一般的想法。


看起来 PHP 的 32 位日期格式是限制因素(与 MySQL 和 JavaScript 相比),所以看起来这是要使用的。有点糟糕,2038 年并不遥远。 - Jimmy

0

对于“尚未设置”的逻辑值,或许使用 null 值更好。


是的,有时候这样做没问题,但在我的情况下,我可以将“未设置”视为过去的日期。我想选择一个一致的过去日期,某种最小日期会很好用。再次强调,这只适用于我的情况,但在这种情况下,最小日期比空日期更好用。 - Jimmy

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