PHP сравнивает временные переменные с if / else

1

Я пытаюсь повторить некоторый текст в зависимости от результатов временной метки, используя инструкцию if/else.

Моя логика такова:

Исходя из значения $data;

  • Если нет результатов => echo 'no results'
  • Если дата меньше сегодняшней даты => echo 'expired'
  • Else => echo 'active'

Проблема, с которой я сталкиваюсь, заключается в том, что в настоящее время мой код всегда отображает "активный" независимо от того, какая дата - мой код до сих пор;

<?php

$data = get_patronapi_data($id);//this contains a date in the format 31-12-13

$dataTimestamp = strtotime($data);//convert date to timestamp
$now = strtotime('today');set timestamo for $now

//echo strtotime('now'); this outputs 1446820684 
//echo $dataTimestamp; this outputs 1954886400
//echo $data; this outputs 31-12-13

//if $data is empty
if (empty($data)){
    echo 'no results';
}
//if $data is not empty but date is less than today
elseif (!empty($data) && $dataTimestamp < $now) {
    echo 'expired date is' .$date; //in d-m-y format
}
//everything else
else {
    echo 'active date is ' .$date; //in d-m-y format
}
?>

Я уверен, что ответ будет очевиден для профессионала, но у вас есть новичок здесь!

  • 2
    Совет: strtotime('today') - пустая трата времени процессора. просто сделайте $now = time() .
  • 0
    и вы проверили, какие значения находятся в $datatimestamp . Если strtotime завершается ошибкой, возвращается логическое значение false, которое будет рассматриваться как целое число 0 для вашего < тестирования.
Показать ещё 3 комментария
Теги:
timestamp
if-statement
strtotime

2 ответа

1
Лучший ответ

Попробуйте что-то вроде этого:

<?php
function myDateToTs($date){
    $data_array = explode("-",$date);
    return strtotime('20'.$data_array[2].'-'.$data_array[1].'-'.$data_array[0]);
}

$data = "31-12-13";      
$dataTimestamp = myDateToTs($data);
$now = strtotime('today');

//echo strtotime('now'); this outputs 1446820684
//echo $dataTimestamp; this outputs 1954886400
//echo $data; this outputs 31-12-13

//if $data is empty
if (empty($data)){
echo 'no results';
}
//if $data is not empty but date is less than today
elseif (!empty($data) && $dataTimestamp < $now) {
echo 'expired';
}
//everything else
else {
echo 'active';
}
  • 0
    это всего лишь конвертация 31-12-13 в 2013-12-13 . explode разделит строку $ data на массив, подобный array('31','12','13') . Я использую этот массив для создания новой строки (где массив помогает менять порядок чисел): $data = '20'.$data_array[2].'-'.$data_array[1].'-'.$data_array[0];
  • 0
    нет, это все. Вы могли бы сделать функцию для него (я изменю свой пост, чтобы показать)
Показать ещё 1 комментарий
0

формат даты dd-mm-yy недействителен для strtime

Пытаться

Американский месяц, день и год mm "/" dd "/" y "12/22/78", "1/17/2006", "1/17/6"

или

День, месяц и четыре цифры с точками, вкладками или чертами dd [.\t-] мм [.-] YY "30-6-2008", "22.12\t1978"

День, месяц и двухзначный год, с точками или вкладками dd [.\T] мм "." yy "30.6.08", "22\t12\t78"

http://php.net/manual/es/datetime.formats.date.php

Ещё вопросы

Сообщество Overcoder
Наверх
Меню