Проблема с датой в PHP - PullRequest
       6

Проблема с датой в PHP

1 голос
/ 07 февраля 2011

У меня есть кусок PHP, который пытается сделать это: 1) заданная строка типа "h m s" (где h = hr, m = min, s = sec) 2) Добавьте время от 1) до времени () 3) отформатируйте результат так, чтобы он выглядел как «у-м-д-ч-мин-с»

Скажем, время пришло 01-01-2011 1:00, я хочу добавить «10 0 0», что должно дать мне 01-01-2011 11:00, но по какой-то причине в настоящий момент, похоже, добавить строку, но она не точная.

Это код, который я использую:

$values_arr['regx_expdate'] = date("Y-m-d H:i:s", time()+$values_arr['regx_expdate']);

где $ values_arr ['regx_expdate'] - строка в формате "h m s", например. "10 0 0".

Основной вопрос в том, как time () узнает, если "10 0 0" на самом деле 10 часов 0 минут 0 минут, а не 10 дней 0 часов 0 минут ??

Ответы [ 5 ]

1 голос
/ 07 февраля 2011

Это не так.

Будет приведено к int , интерпретировано как секунды и добавлено к результату time().

Некоторый код, который мог бы сделать, как вы описали, будет:

list ($h,$m,$s) = explode(' ', $values_arr['regx_expdate'], 3);
$difference = 60*60*$h + 60*$m + $s;
$values_arr['regx_expdate'] = date("Y-m-d H:i:s", time()+$difference);
0 голосов
/ 07 февраля 2011

Чтобы обработать и преобразовать даты в php, вы должны сначала принудительно преобразовать все в unixtimestamp, а затем дать ему желаемую структуру

$date = date("THE-DATE-FORMAT-YOU-WANT", "THE-DATE-YOU-WOULD-LIKE-TO-CONVERT-IN-SECONDS");

//For example.

$new_date = date("Y-m-d H:i:s", strtotime($old_date));

$now = date("Y-m-d H:i:s", time());
0 голосов
/ 07 февраля 2011

Эта маленькая функция может помочь, вы можете настроить ее в соответствии с вашими целями:

function AddingDaysFromNow($number_of_days)
    {
        $today = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
         // today is now time return in seconds

        $addingTime = $today + (86400 * $number_of_days);
         // adding to advance it

        //choice a date form at here
        return date("Y-m-d", $addingTime);
    }

    //use it as 
      $expireDate = AddingDaysFromNow(2);  // assume the 2 is advance to 2 days ahead
                                           // return the day in future

Удачи!

0 голосов
/ 07 февраля 2011

После анализа вашей входной строки по часам, минутам и секундам, возможно, стоит реорганизовать указанный массив значений в строку, которую strtotime PHP может обработать.

0 голосов
/ 07 февраля 2011

Самый простой способ, который я могу придумать, - это извлечь каждый токен из $values_arr['regx_expdate'], сложить секунды и просто добавить его в time().

Например,

if (preg_match('/^(\d{1,2}) (\d{1,2}) (\d{1,2})$/', $values_arr['regx_expdate'], $units)) {
    $seconds = $units[3] + ($units[2] * 60) + ($units[1] * 3600);

    $newTimestamp = time() + $seconds;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...