Как определить, произошла ли отметка времени UNIX «на прошлой неделе» - PullRequest
1 голос
/ 13 августа 2011

У меня есть метка времени Unix, и я хочу проверить, произошло ли это раньше 12:00 в воскресенье текущей недели. Есть предложения?

Ответы [ 2 ]

3 голосов
/ 13 августа 2011
<?php
/**
 * @param  $t  UNIX timestamp
 * @return true iff the given time fell in the previous Sunday->Sunday window
 */
function f($t) {
   $a = strtotime("last Sunday");
   $b = strtotime("-1 week", $a);

   return ($b <= $t && $t < $a);
}

var_dump(f(strtotime("2011-08-12 11:00")));
var_dump(f(strtotime("2011-08-08 11:00")));
var_dump(f(strtotime("2011-08-04 11:00")));
var_dump(f(strtotime("2011-08-01 11:00")));
?>

Выход:

bool(false)
bool(false)
bool(true)
bool(true)

Живая демоверсия.

1 голос
/ 13 августа 2011

Я думаю, что вы можете сгенерировать метку времени для "12:00 воскресенья текущей недели", используя класс datetime: http://www.php.net/manual/en/book.datetime.php

Вы должны иметь возможность сгенерировать объект даты и времени для целевой даты, а затем использовать gettimestamp: http://www.php.net/manual/en/datetime.gettimestamp.php для преобразования его в метку времени.

Затем вы можете сравнить эту временную метку, чтобы увидеть, меньше ли она, чем сгенерированная вами временная метка.

Редактировать: некоторый код (хотя и не такой элегантный, как у Томалака Гереткала)

<?php

//Get current year and week
$year = date('Y');
$week = date('W');

//Get date
$date = date("Y-m-d", strtotime("$year-W$week-7"));


//Get date with time
$datetime = new DateTime("$date 00:00:00");

//Display the full date and time for a sanity check.
echo $datetime->format('Y-m-d h:i:s') . ' = ';

//Convert to timestamp:
$timestamp = $datetime->getTimeStamp();
echo $timestamp;

//Do your comparison here:
if($yourtimestamp < $timestamp){
    return true;
}
...