【问题标题】:PHP Date Subtract Only works first iteration of Do While LoopPHP Date Subtract 仅适用于 Do While 循环的第一次迭代
【发布时间】:2018-08-07 02:28:46
【问题描述】:

我有以“mmdd”为后缀的 mySQL 表。当我在桌子上被击中时,我需要遍历并将这个“mmdd”值存储在一个数组中。问题是 1 天的日期减法仅适用于第一次迭代。我已经尝试了很多方法——作为我课堂上的一个函数,等等;但是,它只减去第 1 天的时间。必须是更好的方法。

$i = 1;
$newday = array();
if ($current === 'Y') {
    $newday[0] = $datesplit[1];
    do {            
        $sqlstmt = "select * from dbname.mytable_".$newday[$i-1];
        $resultchk = $db->query($sqlstmt);
        $dtset = date($newday[$i-1]);
        $newday[$i] = date('md', strtotime($dtset.' -1 day'));
        $i++;           
    } while(mysqli_num_rows($resultchk) > 0);

【问题讨论】:

  • $datesplit[1] 是否类似于 0806(8 月 6 日)?

标签: php date-math


【解决方案1】:

如果你想操作日期,在 PHP 中使用 DateTime 类通常会好很多。

假设 $datesplit[1] 包含类似 '0806' 的内容(适用于 8 月 6 日),我会将您的代码更改为以下内容:

$i = 0;
$newday = array();
$dtset = DateTime::createFromFormat('md', $datesplit[1]);
if ($current === 'Y') {
    do {      
        $newday[$i] = $dtset->format('md');      
        $sqlstmt = "select * from dbname.mytable_".$newday[$i];
        $resultchk = $db->query($sqlstmt);
        $dtset->sub(new DateInterval('P1D'));
        $i++;           
    } while(mysqli_num_rows($resultchk) > 0);
}

【讨论】:

  • 非常感谢。我在 DateTime 类道路上的旅行太短了,在我的挫败感中......我很接近。再次感谢。
  • 没问题。很高兴我能帮助你。绝对理解我花了一段时间才明白这一切的挫败感。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 2016-06-19
  • 1970-01-01
  • 2012-05-28
相关资源
最近更新 更多