如何比较两个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

 

This article is posted by on , link is .

Leave a reply