Получите секунды от даты до конца месяца PHP - PullRequest
0 голосов
/ 19 июня 2019

Извлечение даты подписки из таблицы базы данных sql, которую мы хотим, чтобы клиент выполнил до конца месяца, спустя год. Подписка - это просто какая-то дата в течение месяца. Прошлая годовая часть проста: выяснить, где находится конец этого месяца, и добавить его за несколько секунд к одногодичной части - это проблема.

Дата сохраняется в виде количества секунд от начального нуля Unix. Как узнать количество секунд от этого значения до конца этого месяца? Я попытался преобразовать значение даты в фактическую дату, используя m-i-Y

Конец месяца:

$expDate = date('m-i-Y',$row1["renewDate"]);

Это работает. Я получаю последний день этого месяца в виде строки. Но если я попытаюсь:

$endOfMonth = strtotime($expDate);

Не работает ....

echo'ing $expDate показывает последний день месяца в виде строки.

echo'ing $endOfMonth ничего не возвращает ...

Спасибо за любые мысли по этому поводу.

Ответы [ 4 ]

0 голосов
/ 20 июня 2019

mktime ($ expDate), к сожалению, не работает, по крайней мере, с CentOS6.9.Даже с переменной expdate он по-прежнему возвращает текущее системное время.

Используя формат даты, который распознает strtotime, Ymt работал правильно.Спасибо user1597430 ...

0 голосов
/ 19 июня 2019

Вы можете поиграть с чем-то вроде этого.Если база данных имеет время Epoch, то вы можете использовать символ «@» для преобразования ее в дату.Таким образом, вы можете получить дату подписки, а также дату окончания месяца подписки, используя m / t / Y.Вы можете преобразовать это обратно в DT, а затем в UNIX время с помощью get Timestamp.Похоже, работает на время = 1560961801.

$row1["renewDate"] = 1560961801;
$unixfromDB = $row1["renewDate"];

$date = new DateTime('@' .$unixfromDB); // your UNIX timestamp.     
$subdate =  $date->format( 'm/d/Y' ); // subscription date

$endmonth = $date->format( 'm/t/Y' ); // end of month date
$endmonth = DateTime::createFromFormat('m/d/Y', $endmonth);
$endmonth = $endmonth->getTimestamp();  // UNIX timestamp for end of month.

echo ($endmonth - $unixfromDB) / (60 * 60 *24);  // days to end of month
0 голосов
/ 19 июня 2019

Попробуйте использовать mktime() вместо strtotime().

<?
/* establish variables */
$now=time();    // epoch seconds right now
$expDate = date('m-t-Y', $row1["renewDate"]);   //note the switch to 't' as suggested by @ehymel
$eom = mktime($expDate);    // converts 'end of month' date into epoch seconds

/* results */
$secondsleft = $eom - $now;     // number of seconds until the end of the month
echo $secondsleft;  // return results
?>
0 голосов
/ 19 июня 2019

strtotime не работает должным образом с произвольными форматами даты.У вас есть два варианта:

  1. Используйте date_create_from_format для анализа пользовательских форматов даты.
  2. Конвертируйте вашу строку в Y-m-d формат, который strtotime понимает автоматически.

Например:

$date = date('Y-m-t', $row1["renewDate"]);
$timestamp = strtotime($date);

PS Как уже упоминалось в комментариях, вы должны использовать t вместо i.

...