php - 写 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)
{
解决方案
我建议创建一个可以重用的函数 - 例如:
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;
}
推荐阅读
- python - 了解 Pandas 中的稀疏数据结构
- google-maps - 地图有时不加载 - initMap 不是一个函数
- swift - DateComponentsFormatter 和 .nanosecond
- javascript - SmoothScroll 导航不适用于 bootstrap 4
- java - 使用 Star 打印机 SDK 时出现 NullPointerException
- java - 在 Java List 中重新排列索引
- bash - 如果 shell 脚本中的错误不起作用,则退出?
- ruby-on-rails - 使用 Suckerpunch 在后台运行进程时页面冻结
- kubernetes - 如何在 AWS EKS 上的 Kubernetes 集群上运行 Tiller
- google-chrome - 我可以获得一个键盘快捷键以在 chrome 中转到当前网站的主页吗?