首页 > 解决方案 > 写 if, else on date

问题描述

我使用 Codeigniter 和 Gammu 来制作 SMS 自动重播功能。短信格式为:DAFTAR#NIK#NAME#DATE

日期格式为 yyyy-mm-dd。我使用了 if 语句中的 #DATE 文本中的日期。

if($tanggal_periksa==$dataku) 

如果输入的日期距离当前日期有 7 天的范围,则为真。例如:现在在 2020-07-17。如果我们使用日期 2020-07-17 到 2020-07-23,则 if 语句为真。除了那个日期之外,这是值得错的。但是当我在 7 天内使用日期时,它仍然是错误的。

    {
        $inboxs= $this->db->get_where('inbox', array('Processed'=>'false'));
        foreach ($inboxs->result() as $inbox)
        {
            $pesan= $inbox->TextDecoded;
            $no_hp = $inbox->SenderNumber;
            $pecah = explode("#", $pesan);
            $key=$pecah[0];
            $keyword=trim($key);
            if(strtoupper($keyword)=='DAFTAR')
            {
                if(count($pecah)==4)
                {
                    $NIK=trim($pecah[1]);
                    $nama=$pecah[2];
                    $tanggal_periksa=$pecah[3];// i got it from #DATE
                    $tahun = date('Y');
                    $bulan = date('m');
                    $tanggal = date('d');
                    $format = $tahun.'-'.$bulan.'-'.$tanggal;
                    $seminggu = abs(6*86400);
                    $awal = strtotime($format);
                    $akhir = strtotime($format)+$seminggu;
                    $sub_kalimat = substr($tanggal_periksa,4,1);
                    $sub_kalimat1 = substr($tanggal_periksa,7,1);
                    $jumlah_karakter = strlen($tanggal_periksa);
                    // echo "<br>".$akhir;
                    if($jumlah_karakter==10 && $sub_kalimat=="-" && $sub_kalimat1=="-")//done
                    {
                        for($i=$awal; $i <=$akhir;$i+=86400)
                        {
                            $dataku=date('Y-m-d', $i);
                            if($tanggal_periksa==$dataku)
                            {

标签: phpcodeigniterif-statement

解决方案


我建议创建一个可以重用的函数 - 例如:

function checkDateRange($start, $end, $range) {
    /* $start and $end are datestrings in YYYY-MM-DD format */
    /* $range is an integer, representing range in days */

    $range = $range * 24 * 60 * 60;
    $time_start = strtotime($start);
    $time_end = strtotime($end);
    
    return
        /* check if END date if after START date */
        ($time_end - $time_start >= 0)
        &&
        /* check if END date is in RANGE */
        ($time_end - $time_start < $range);
}

因此,您可以在需要检查日期是否在范围内时调用此函数 - 例如:

$TODAY = date("Y-m-d"); // "2020-07-17"

checkDateRange($TODAY, "2020-07-16", 7); // returns false
checkDateRange($TODAY, "2020-07-17", 7); // returns TRUE

checkDateRange($TODAY, "2020-07-23", 7); // returns TRUE
checkDateRange($TODAY, "2020-07-24", 7); // returns false

此外,您可以使用DateTime::diff - PHP 手册来创建相同的函数:

function checkDateRange($start, $end, $range) {
    
    $date_start = new DateTime($start);
    $date_end = new DateTime($end);
    
    return
        /* check if END date if after START date */
        $date_end->diff($date_start)->invert != 1
        &&
        /* check if END date is in RANGE */
        $date_end->diff($date_start)->days <= $range;
}

推荐阅读