我有一个关于用PHP计算日期的一般性问题。
如果我在我的数据库中存储这样的时间戳,会发生什么:
$db_timestamp = '2010-01-31 00:00:00';
然后运行一个每日脚本,检查自数据库中保存时间戳以来是否已经过了一个月:
if ($db_timestamp == make_unix_timestamp(mktime(0, 0, 0, date("m") - 1, date("d"), date("Y")), TRUE, 'eu')))
{
do something
};
我的问题是我刚刚意识到这对所有日期都不适用。在这种情况下,2月份不会调用“做某事”,因为2月没有第31天。关于如何实现这样的事情的任何想法?
答案 0 :(得分:3)
首先,您的DBMS应具有日期/时间的数据类型。它们都以类似的方式存储时间戳。
如果需要返回PHP可以理解的时间戳,MySQL会提供一个名为UNIX_TIMESTAMP()
的函数。
SELECT UNIX_TIMESTAMP(`createTime`) FROM `articles`;
相反的功能称为FROM_UNIXTIME()
:
INSERT INTO `articles` (`createTime`) VALUES ( FROM_UNIXTIME(12345678) );
MySQL(或其他DBMS,但我以MySQL为例)还有许多其他函数来计算时差。例如,要了解文章是否超过一个月,请使用DATE_SUB()
:
SELECT * FROM `articles`
WHERE `article`.`createTime` <= DATE_SUB(NOW(), INTERVAL 1 MONTH);
(在MySQL5及以上版本中,您也可以这样写)
SELECT * FROM `articles`
WHERE `article`.`createTime` <= (NOW() - INTERVAL 1 MONTH);
答案 1 :(得分:1)
$ts = strtotime($db_timestamp);
if ($ts < (time() - 2592000))
{
do something;
}
2592000秒= 30天
答案 2 :(得分:1)
您可以使用date_diff http://us3.php.net/manual/en/datetime.diff.php 或者将数据库中的时间戳与
进行比较strtotime("-1 month");
答案 3 :(得分:1)
您可以使用查询检查时间戳:
MySQL的:
select date from table where date < now() - INTERVAL 1 MONTH;
答案 4 :(得分:0)
这取决于你如何考虑“一个月”。
如果“一个月”意味着“30天”,解决方案是将您从数据库获取的时间戳与当前时间戳进行比较:
$db_timestamp = strtotime('2010-01-31');
$current_timestamp = time();
var_dump( ($current_timestamp - $db_timestamp) / (24*3600) );
如果差异是30天......就是这样。
几个笔记: