如何比较两个Unix时间戳是否在一天
首先让我们来了解一下 格林威治时间: (From: http://baike.baidu.com/view/856.html?wtp=tt)
简单来说就是零经度线上的时间,又称国际标准时间,或者格林威治时间,或者世界时。
Unix 时间戳即从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
我们可以在PHP中这样测试:
php -r 'date_default_timezone_set("Asia/Shanghai"); echo date("Y-m-d H:i:s", 0); '
1970-01-01 08:00:00
也就是说在这个时刻我们已经是上午8点了,而在比较是否同一天的时候,需要假定我们这儿 1970-01-01 00:00:00的时间戳为0,这样 就需要Unix时间戳上加上8 * 3600。
这样的话,计算到今天的天数的方式为:
php -r 'echo floor((time() + 8 * 3600 )/ (3600 * 24));'
14317
php -r ' date_default_timezone_set("Asia/Shanghai"); echo floor((strtotime("2009-3-14 00:00:00") + 3600 * 8) / ( 3600 * 24) );echo "\n";'
14317
php -r ' date_default_timezone_set("Asia/Shanghai"); echo floor((strtotime("2009-3-14 00:00:00") + 3600 * 8) / ( 3600 * 24) );echo "\n";'
14317
这样比较两个Unix时间戳是否在同一天就好说了:
php -r ' date_default_timezone_set("Asia/Shanghai"); echo strtotime( 23:00:00"); echo "\n";'
1237042800
php -r ' date_default_timezone_set("Asia/Shanghai"); echo strtotime("2009-3-14 1:00:00"); echo "\n";'
1236963600
$time1 = 1237042800;
$time2 = 1236963600;
if( floor(($time1 + 3600 * 8) / (3600 * 24)) == floor(($time2 + 3600 * 8 ) / (3600 * 24)))
{
echo "在同一天\n ";
}
else
{
echo "不在同一天\n";
}
?>
当然,你可以使用更简单的方式来计算:
// 我们的时区可以为: Asia/shanghai , Asia/Chongqing 等等都为东八区的时间。
date_default_timezone_set("Asia/Shanghai");
$time1 = 1237042800;
$time2 = 1236963600;
if(date("Ymd", $time1) == date("Ymd", $time2)) {
echo "在同一天\n";
}
else
{
echo " 不在同一天\n";
}
相关函数:
http://cn.php.net/manual/en/function.date.php
http://cn.php.net/manual/en/function.time.php
http://cn.php.net/manual/en/function.date-default-timezone-set.php
最后附上世界时区分布图:
http://onemouse.cn/images/shiqu.jpg