Скрипт для перевода столбца даты и времени в mySQL на «начинается через x дней / часов» - PullRequest
1 голос
/ 30 мая 2011

У меня есть таблица MySQL с событиями в ней. Каждое событие имеет столбец даты и времени, который указывает, когда оно начинается.

Я ищу способ получения строки, похожей на эту, с использованием PHP:

'событие X начинается через 2 часа'

Должен также работать в течение дней, недель и месяцев:

'событие X начинается через 5 дней / недель / месяцев'

Ответы [ 3 ]

0 голосов
/ 30 мая 2011

Я взял следующий фрагмент из здесь .

<?php
$dateDiff = $date1 - $date2;
$fullDays = floor($dateDiff/(60*60*24));
$fullHours = floor(($dateDiff-($fullDays*60*60*24))/(60*60));
$fullMinutes = floor(($dateDiff-($fullDays*60*60*24)-($fullHours*60*60))/60);
echo "Differernce is $fullDays days, $fullHours hours and $fullMinutes minutes.";
?>

$date1 будет дата базы данных, $date2 будет текущая дата.Это помогает?

0 голосов
/ 30 мая 2011

У вас должна быть переменная с количеством секунд до вашей даты. Мой пример функции ниже.

<code><?php

function timeRemaining($total) {
 if (!$total || $total <= 0) return false;
 // define your ranges here (desc order), the keys will go to output.
 $elements = array(
  "years"   => 60*60*24*30*12,
  "months"  => 60*60*24*30,
  "weeks"   => 60*60*24*7,
  "days"    => 60*60*24,
  "hours"   => 60*60,
  "minutes" => 60,
  "seconds" => 1
 );
 // compute in a cycle to compress the code
 $return = array();
 foreach ($elements as $name => $dur) {
  $return[$name] = floor($total / $dur);
  $total -= $return[$name] * $dur;
 }
 // return data in the array form
 return $return;
}

// how much till new year?
echo "<pre>",
print_r(timeRemaining(mktime(0,0,0,1,1,2012)-time()));
echo "
"; ?>

Просто скопируйте и вставьте любой php-файл для тестирования, например, он возвращает массив с годами, месяцами и т. Д., Оставшийся до нового года. Вы можете адаптировать вывод для своих нужд, передавая возвращаемое значение другой функции, генерирующей строки, просто не забудьте проверить значение по false, что будет означать, что время прошло.

Обратите внимание, что месяцы используют упрощенный 30-дневный диапазон, а год здесь установлен на 360 дней, а не 365,25, как в реальном мире.

Надеюсь, это будет полезно.

0 голосов
/ 30 мая 2011

Чтобы использовать это, я сначала изменил формат даты на:

Select DATE_FORMAT(date_of, '%d/%m/%Y') as example from tbl

Функция php:

<?php
    function days_ago($time)
    {
        $today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
        $time_array = explode("/", $time);

       if(count($time_array) < 2)
       {
        $time = "N/A";
       }
       else
       {
         $time =   mktime(0, 0, 0, date($time_array[1]), date($time_array[0]), date($time_array[2]));
         $daysAgo = $today - $time;
         $time = ($daysAgo/86400);    
       }
       return $time;
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...