【问题标题】:writing if, else on date写 if, else on date
【发布时间】:2020-07-17 04:57:27
【问题描述】:

我使用 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)
                            {

【问题讨论】:

    标签: php codeigniter if-statement


    【解决方案1】:

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

    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 manual 创建相同的函数:

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

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2014-11-04
      • 2022-11-28
      • 2011-01-07
      • 2023-02-01
      • 1970-01-01
      相关资源
      最近更新 更多