PHP时间戳只有一小时

时间:2013-10-01 17:10:36

标签: php

我正在使用时间戳来确定两个人是否在同一时间段内在线,这里是我的UTC时间戳仅供参考:

date_default_timezone_set('UTC');
$utc12am = 1380585600;
$utc1am = 1380589200;
$utc2am = 1380592800;
$utc3am = 1380596400;
$utc4am = 1380600000;
$utc5am = 1380603600;
$utc6am = 1380607200;
$utc7am = 1380610800;
$utc8am = 1380614400;
$utc9am = 1380618000;
$utc10am = 1380621600;
$utc11am = 1380625200;
$utc12pm = 1380628800;
$utc1pm = 1380632400;
$utc2pm = 1380636000;
$utc3pm = 1380639600;
$utc4pm = 1380643200;
$utc5pm = 1380646800;
$utc6pm = 1380650400;
$utc7pm = 1380654000;
$utc8pm = 1380657600;
$utc9pm = 1380661200;
$utc10pm = 1380664800;
$utc11pm = 1380668400;

我遇到的问题是,如果有人说他们在晚上10点到12点之间在线,就像在1380668400和1380585600之间说的那样,它会倒退,这会丢掉整个代码。我如何编写一个时间戳来定义小时,而不是一天,或者我将如何解决这个问题?我的大脑着火了。

更新

经过多次头痛后答案比需要的更简单,所有日期都是静态的,所以动态抓取它们不是我打算做的,我只使用日期功能所以我不必写出新的每个时区的UTC值。无论如何,我画了一张照片,这真的帮助了我,你只需要检查$ max是否在$ mina的范围内 - $ maxa或者如果$ min在$ mina的范围内 - $ maxa。我不敢相信这花了我很长时间

    $blend = 'False';
    if((($maxa > $min) And ($maxa < $max)) Or (($mina > $min) And ($mina < $max))) {
        $blend = 'True';
    }
    if($min > $max) {
        if(($mina > $min) Or ($mina < $max)) {
            $blend = 'True';
        }
        if(($maxa > $min) Or ($maxa < $max)) {
            $blend = 'True';
        }
    }
    if($min === $max) $blend = 'True';

2 个答案:

答案 0 :(得分:1)

只需保存小时(值从0到23)。 例如,15是下午3点。

答案 1 :(得分:0)

时间戳记存储自Unix Epoch(1970年1月1日00:00:00 GMT)以来经过的秒数。

这意味着如果只计算那个时代的秒数,你可以从中得到你想要的任何东西(天,月,小时等)。 Php谢天谢地让我们这么容易。

这是时间戳中24小时格式的当前“小时”。

$hour = date("G", 1380621600);

这意味着从1380621600到1380621600 + 3599的所有时间戳都将返回10(am),这应该是你要找的。

如果您想知道某人是否在上午10点到12点之间在线,那么您只需检查date("G",<timestamp>)是否在10到12之间。

如果您想在2013年10月1日10到12之间检查某人是否在线,那么您可以使用之前的方法以及一些额外的参数来获得您想要的内容:

$year = date("Y", <timestamp>);  
$month = date("F", <timestamp>);  
$date = date("j", <timestamp>);

如果您喜欢冒险,也可以使用爆炸一步完成此操作。

$logged_in = date("Y F j G", <timestamp>)

如果您想查看两个用户是否在同一时间在线,那么您可以对每个人的在线时间进行排序,并在列表中运行一次线性扫描(使用我们现在可以计算出的小时数)来找出重叠


参考文献:

PHP - Date
PHP - Explode