【问题标题】:PHP compare time variables with if/elsePHP 将时间变量与 if/else 进行比较
【发布时间】:2015-11-06 14:48:32
【问题描述】:

我正在尝试使用if/else 语句根据时间戳的结果来回显一些文本。

我的逻辑如下;

基于$data的值;

  • 如果没有结果 => echo '没有结果'
  • 如果日期小于今天的日期 => echo '过期'
  • Else => echo '活动'

我面临的问题是,目前我的代码总是显示“活动”,无论日期是什么 - 我的代码到目前为止是;

<?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
}
?>

我相信对于专业人士来说答案是显而易见的,但你这里有一个新手!

【问题讨论】:

  • 提示:strtotime('today') 是在浪费 CPU 时间。就做$now = time()
  • 您是否检查过$datatimestamp 中的值。如果 strtotime 失败,它返回布尔值 false,它将被视为整数 0 用于您的 &lt; 测试。
  • 调整 get_patronapi_data() 以返回 2013-12-31 而不是 31-12-13
  • strtotime('today') 不等于一天的开始吗?您需要它是当前的秒数还是一天的开始?
  • 因为strtotime 不知道你是哪一年。当您使用“-”时,它需要美国格式,您也可以将“-”替换为“。”喜欢31.12.13。他们 strtotime 期望德语(等)格式

标签: php if-statement timestamp strtotime


【解决方案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';
}

【讨论】:

  • 只是将31-12-13 转换为2013-12-13explode 会将 $data 字符串拆分为像 array('31','12','13') 这样的数组。他们我使用这个数组来构建一个新字符串(数组有助于交换数字的顺序):$data = '20'.$data_array[2].'-'.$data_array[1].'-'.$data_array[0];
  • 不,仅此而已。你可以为它做一个功能(我会改变我的帖子来显示)
  • +1 的解释和功能,谢谢菲利普 - 我自己永远不会到达那里!现在一切都按预期工作!添加“已过期 x 天前”功能会非常困难吗?现在我知道我的运气了! :)
【解决方案2】:

日期格式dd-mm-yy格式对strtime无效

试试

美国的月、日和年 mm "/" dd "/" y "12/22/78", "1/17/2006", “1/17/6”

日、月和四位数年份,带点、制表符或破折号 dd [.\t-] mm [.-] YY "30-6-2008", "22.12\t1978"

日、月和两位数的年份,带有 点或制表符 dd [.\t] mm "." yy "30.6.08", "22\t12\t78"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多