我有一个网站,我从mysql表中显示信息,例如上次更改的日期。 在mysql中,字段类型是'TIMESTAMP'... 我有这样的代码:
$postdate = date( "j F", strtotime( $row['insert_date'] ) ); // Getting the date from the database
$posthour = date( "H:i", strtotime( $row['insert_date'] ) ); // Getting the time from the database
if ($postdate == date("j F")) {$postdate = "Today";}
if ($postdate == date('j F', strtotime('-1 day'))) {$postdate = "Yesterday";}
if ($postdate == date('j F', strtotime('-2 day'))) {$postdate = "Day before yesterday";}
我听说strtotime是一个缓慢的功能。有没有人有任何关于如何重写这个以提高性能的建议?
注意:如果你建议的话,mysql表中的TIMESTAMP可能会改变,那没问题!
由于
答案 0 :(得分:3)
我会选择这样的东西(使用DATEDIFF):
SELECT ..., DATEDIFF( `insert_date` , CURRENT_TIMESTAMP ) AS diff_insert, ...
FROM xxxxxx ...
然后在php:
if ($row['diff_insert'] == 0) {
$postdate = "Today";
} else if ($row['diff_insert'] == -1) {
$postdate = "Yesterday";
} else if ($row['diff_insert'] == -2) {
$postdate = "Day before yesterday";
}
答案 1 :(得分:1)
如上所述,你可以在MySQL中使用DATEDIFF,但是从PHP 5.3开始,你也可以在DateTime类上使用'diff'方法。
示例:
<?php
$dateObject = new DateTime(); // No arguments means 'now'
$otherDateObject = new DateTime('2008-08-14 03:14:15');
$diffObject = $dateObject->diff($otherDateObject));
echo "Days of difference: ". $diffObject->days;
?>
'DateTime'diff函数返回DateInterval对象。该对象由与差异相关的变量组成。您可以像上面的示例一样查询天,小时,分钟,秒。
请参阅手册:http://nl2.php.net/manual/en/datetime.diff.php。可悲的是,这是一个PHP 5.3&gt;唯一的功能。
答案 2 :(得分:0)
修改您的SELECT语句以使用UNIX_TIMESTAMP(),这将更有效strtotime
。 e.g:
SELECT ... UNIX_TIMESTAMP(`insert_date`) AS `insert_datestamp`, ...
然后:
$posthour = date( 'H:i', $row['insert_datestamp']);
// calculate the difference between today (starting at midnight) and the posted date
// 86400 is the number of seconds in a day - should really use a constant here
$diff_days=round( (mktime(0, 0, 0) - $row['insert_datestamp']) / 86400);
switch($diff_days) :
case 0: $postdate = 'Today'; break;
case 1: $postdate= 'Yesterday'; break;
case 2: $postdate='Day before yesterday'; break;
default: $postdate=date('j F', $row['insert_datestamp']); break;
endswitch;
最好使用switch语句,而不是使用多个if语句。
答案 3 :(得分:0)
您可以使用MySQL UNIX_TIMESTAMP()函数来获取时间戳,然后在PHP date()函数中使用它,而不是在它通常返回的日期字符串上调用strtotime()。
此外,您可以使用MySQL DATEDIFF()函数来获取今天和数据库中日期之间的天数。
SELECT DATEDIFF(NOW(), `my_date`) AS 'days_since_post',
UNIX_TIMESTAMP(`my_date`) AS 'my_date_stamp'
FROM `my_table`;
然后在PHP中:
<?php
switch($row['days_since_post']) {
case 0: $post_day = 'Today'; break;
case 1: $post_day = 'Yesterday'; break;
default: $post_day = date('M jS, Y'); break;
}
$post_time = date('H:i', $row['my_date_stamp']);
echo "Posted: {$post_day} at {$post_time}";
?>