如何创建间隔时间算法?

时间:2014-04-25 09:32:26

标签: php

时间表:上午12:00至晚上11:59。现在有些用户在早上7点左右登录到页面,所以系统什么都不做。我需要做的是将这个时间线拆分为3个部分。

1 part : 8:00 am - 11:59 am
2 part : 12:00 pm - 3:59 pm
3 part : 4:00 pm - 7:59 pm

如果用户在上午9:00及时登录,他可以看到代码并且他可以将此代码用于激活某些功能。如果用户在下午2点左右登录,那么系统会显示其他代码等等。

所以我的想法是在数据库中使用三个间隔创建表格,系统大约午夜将为每个部分创建新代码:

Table
id | interval_start | interval_stop
1 | 8:00 am | 11:59 am
2 | 12:00 pm | 3:59 pm
3 |  4:00 pm | 7:59 pm

Table code
id | id_interval | code
1 | 1 | 432432
2 | 2 | 654553
3 | 3 | 654646

所以我可以设置cron并使用创建新代码制作一些PHP文件。当用户转到应用程序时,他会看到新的代码。你怎么看待这个想法?这将是好的和最佳的?

3 个答案:

答案 0 :(得分:1)

一种解决方案是计算午夜和当前时间之间的秒数,如下所示:

$interval1_start = 60 * 60 * 8; // 8am
$interval1_end = 60 * 60 * 12 -1; // 11:59:59am
$interval2_start = 60 * 60 * 12; // 12pm
$interval2_end = 60 * 60 * 16 -1; // 15:59:59pm
$interval3_start = 60 * 60 * 15; // 15pm
$interval3_end = 60 * 60 * 20 -1; // 15:59:59pm

$init_time = strtotime(date('Y-m-d'));
$cur_time = time();

$diff = $cur_time - $init_time;

if ($diff >= $interval1_start && $diff <= $interval1_end) {
    echo 'code 1';
}
elseif ($diff >= $interval2_start && $diff <= $interval2_end) {
    echo 'code 2';
}
elseif ($diff >= $interval3_start && $diff <= $interval3_end) {
    echo 'code 3';
}

DEMO

当然,可以从数据库中检索间隔和代码,每天都可以不同。

答案 1 :(得分:1)

你可以用86400秒分割一个日期,所以从28800到43140是8:00 - 11:59,检查该间隔内的用户是否可以获得当前时间戳并从当前时间戳中删除。像:

date_default_timezone_set('Europe/Riga'); // Don't forget to set correct GMT
// cause server time can be other.

$today = getdate();
$seconds=$today['hours']*3600+$today['minutes']*60+$today['seconds'];
// or use time()-strtotime(date('Y-m-d'))

$intervals=array(
array('start'=>0,'end'=>3600), // 00:00:00-01:00:00
array('start'=>3601,'end'=>7200), // 01:00:01-02:00:00
);

$in_interval=false;
$in_key=-1;
foreach($intervals as $key => $value) {
  if($seconds>=$value['start'] && $seconds<=$value['end']) {
   $in_interval=true;
   $in_key=$key;
   break;
  }
}

if($in_interval) {
  echo 'Visitor is in interval, ID:'.$in_key;
} else {
  echo 'Visitor is not in interval.';
}

答案 2 :(得分:0)

是的,我认为这是个好主意,现在根据代码可以显示代码