我使用Codeigniter和Gammu来实现SMS自动部署功能。短信格式为:DAFTAR#NIK#NAME#DATE
日期格式为yyyy-mm-dd。我在if语句中使用了取自#date文本的日期。
if($tanggal_periksa==$dataku)
如果输入的日期与当前日期相距七天,则为true。示例:现在是2020-07-17。如果我们使用日期2020-07-17到2020-07-23,则if语句为true。如果不是那个日期,那就错了。但当我用一个七天的日期时,它仍然是错误的。
{
$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)
{
我建议创建一个可以重用的函数-例如:
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;
}