1.时区问题
date()函数是获取服务器时间的函数。但在不同的主机上,在同一个时间内,可能由于时区不同获取的时间值不同。
从php5.1.0开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的。也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和我们的时间(北京时间)差了正好8个小时.
可以用以下两种方法解决:
1). 修改php.ini文件,查找 ;date.timezone = ,把前面的分号去掉在 "="后面加上时区
比如:Asia/Chongqing (重庆),Asia/Shanghai (上海),Asia/Urumqi (乌鲁木齐),Asia/Macao (澳门),Asia/Hong_Kong (香港),Asia/Taipei (台北)
重启http服务器 如apache2即可。
2). 如果你没有修改php.ini的权限那么就在你写程序时在调用data()函数之前加上一句 " date_default_timezone_set("时区");
比如:
date_default_timezone_set ("Asia/Chongqing");
echo date("Y-m-d H:i:s");
2. 给定两个日期时间串(如2010-03-21 04:26:21),计算出间隔时间是否超过一天
$date1=strtotime('2010-03-21 04:26:21');
$date2=strtotime('2010-03-22 04:26:19');
$secondsInOneDay = 60 * 60 * 24;
$period = $date2 - $date1;
if($period >= $secondsInOneDay) {
echo '超过一天';
} else {
echo '不到一天';
}
3. 计算7天前的日期串并输出
<?php
$d = time() - 60 * 60 * 24 * 3;
echo date('Y-m-d', $d);
4. 顺便提下Magento
Magento的Mage_Core_Model_Resource_Abstract有个方法formateDate,下例
$days = 7;
$d = $resModel->formatDate(time() - 60 * 60 * 24 * 7);
echo $d;
可以输出形如:2010-03-22 04:26:19 的字符串用来数据库条件查询等
Magento的Mage_Core_Block_Abstract也有一个fomateDate方法,不过是对形如2010-03-22 04:26:19这样的数据库常用的日期字段串的格式化,如一条产品review的时间为:2010-03-22 04:26:19,那么
<?php echo $block->formatDate($_review->getCreatedAt()); ?>
上述代码默认使用'short'格式输出: 2010/03/22