【问题标题】:php: how to decrement date time into a foreach for every item...?php:如何将日期时间减少到每个项目的 foreach 中......?
【发布时间】:2026-01-26 03:10:01
【问题描述】:

...而且不止一次...

    $now = date("D, d M Y H:i:s O");
    foreach ($items AS $item)
        {

            $currentDate = strtotime($now);
            $pastDate = $currentDate-(60*5);
            $formatDate = date("Y-m-d H:i:s", $pastDate);
            echo "\t\t<item>\n";
            echo "\t\t\t<pubDate>" . $formatDate . "</pubDate>\n" ;

现在,我希望 formatDate 每次减少 5 分钟,我不希望每个元素都使用相同的时间...谢谢

【问题讨论】:

    标签: php datetime foreach decrement


    【解决方案1】:

    您最初减去 (60*5) 的想法是完全正确的;您只需要继续从工作值中减去它,而不是根据您的代码反复从原始值中减去它:

    $looptime = time();
    foreach ($items AS $item) {
        $looptime -= (60*5);
        $formatDate = date("Y-m-d H:i:s", $looptime);
        echo "\t\t<item>\n";
        echo "\t\t\t<pubDate>" . $formatDate . "</pubDate>\n" ;
    }
    

    【讨论】:

    • 我认为人们对 strtotime() 的“魔力”如此着迷,他们只想一遍又一遍地使用它......
    • @Mark B - 是的,这很奇怪。 strtotime() 是一个可怕的功能;应尽量少用。幸运的是,我注意到推荐它的每个人现在要么改变了主意,要么删除了他们的答案,所以我已经从我的答案中删除了这句话。
    • eheheh 但为什么可怕?
    • 嘿,相反...如果我想为每个项目随机化相同(-5 分钟)的时间?也就是说,-5 减量很好,但并不总是从第一项开始,我会随机将所有元素放入数组中...
    • 好吧,没关系...我用shuffle($items);,除非你有更好的方法
    【解决方案2】:
    $currentDate = time();
    foreach ($items as $item){
        $formatDate = date("Y-m-d H:i:s", $currentDate);
        echo "\t\t<item>\n";
        echo "\t\t\t<pubDate>" . $formatDate . "</pubDate>\n" ;
        $currentDate = strtotime('-5 minutes', $currentDate);
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 PHP 5.3,您应该检查DateTime。它允许你创建一个特定时间的对象,它有一个sub() 方法,你可以使用它来减少时间。

      【讨论】:

        【解决方案4】:
        $now = time();
        foreach ($items AS $item)
            {
                echo "\t\t<item>\n";
                echo "\t\t\t<pubDate>" . date("Y-m-d H:i:s", $now) . "</pubDate>\n" ;
                echo "\t\t</item>\n";
                $now -= (60*5);
            }
        

        【讨论】:

          最近更新 更多