PHP: Проверьте, прошла ли неделя с момента отметки времени
Предположим:
$time = '2010-05-17 02:49:30' // (retrieved from MySQL TIMESTAMP field)
Как сделать следующее в PHP:
1) Проверьте, прошло ли больше недели с тех пор, как это время прошло?
2) предположив "false" на (1), выясните, сколько еще времени до отметки в одну неделю, округленной до оставшихся дней и часов.
Я знаю, что это довольно просто, но он использует очень специфический синтаксис. Я никогда раньше не играл с вычислениями времени, поэтому был бы признателен за некоторые указания.
Спасибо!
7 ответов:
$time = strtotime('2010-05-10 02:49:30'); $one_week_ago = strtotime('-1 week'); if( $time > $one_week_ago ) { // it's sooner than one week ago $time_left = $time - $one_week_ago; $days_left = floor($time_left / 86400); // 86400 = seconds per day $hours_left = floor(($time_left - $days_left * 86400) / 3600); // 3600 = seconds per hour echo "Still $days_left day(s), $hours_left hour(s) to go."; }
Не strtotime позволяет вам делать такие вещи...
$timestamp = strtotime($time); $oneweekago = strtotime("-1 week"); if($oneweekago<=$timestamp) { // it's been less than one week $secondsleft = $oneweekago - $timestamp; // ... }
Вы можете использовать strptime/strftime (или метку времени mysql) для анализа вашего времени, а затем проверить, является ли оно по крайней мере одной неделей в настоящем (одна неделя = 604800 секунд).
Если одна неделя не прошла, то вы можете вычислить, сколько секунд еще осталось, из которых вы можете вычислить оставшиеся дни и часы.
SELECT * FROM 'contents' WHERE (WEEK(NOW(), 7) = WEEK('publish_up', 7)) AND YEAR('publish_up') = YEAR(NOW())
Существует множество замечательных функций для манипулирования датой. Взгляните на эту страницу руководства http://php.net/manual/en/ref.datetime.php
Mysql имеет кучу функций datetime . среди них date_add и datediff.
хотя считать часы было довольно сложно.
В любом случае, я не могу поверить, что вы собираетесь сделать это сравнение с помощью PHP
Вот ты где.:
$time = strtotime('2010-05-9 02:49:30'); $oneWeekAgo = time() - (7 * 84600); $hasOneWeekPassed = $time < $oneWeekAgo; if (!$hasOneWeekPassed) { $timeLeft = $time - $oneWeekAgo; } var_dump($hasOneWeekPassed); var_dump($timeLeft);Абсолютно не делайте того, что сказал полковник шрапнель (вычислите это в MySQL). Мало того, что это совершенно не нужно, но это будет по крайней мере в 20 раз медленнее, чем чистый PHP выше.
Comments