Php symfony循环中的日期减去10分钟

Php symfony循环中的日期减去10分钟,php,symfony,datetime,Php,Symfony,Datetime,我有一个循环,从今天开始到一个旧日期,每个循环将日期递减到10分钟 该代码仅在我的symfony 2.8中存在问题。。。 我在没有symfony进行测试的情况下重写了代码,它可以正常工作 我认为你做了太多不必要的逻辑。对我来说,这只是适当地使用DateTime并减去间隔 <?php $start = new DateTime('2017-01-21T02:20:00+01:00'); $current = new DateTime('2019-01-01T02:20:00+01:00'

我有一个循环,从今天开始到一个旧日期,每个循环将日期递减到10分钟

该代码仅在我的symfony 2.8中存在问题。。。 我在没有symfony进行测试的情况下重写了代码,它可以正常工作



我认为你做了太多不必要的逻辑。对我来说,这只是适当地使用DateTime并减去间隔

<?php

$start = new DateTime('2017-01-21T02:20:00+01:00');
$current = new DateTime('2019-01-01T02:20:00+01:00');
$tenMinInterval = new \DateInterval('PT10M');


for($i = 0; $current > $start; ++$i) {
   echo $i . ' '. $current->format('Y-m-d H:i:s') . ' -> ' . $start->format('Y-m-d H:i:s') . "\r\n";  
   $current->sub($tenMinInterval);
}

关于您的情况,您正在玩时区和时间戳,当您将DateTime转换为时间戳时,您将丢失有关时区的信息。如果要包括时区,请在$start$current DateTime构造函数中设置它们;如果要将其转换为其他时区,请在DateTime上使用setTimezone()

为什么你不直接使用
$dateTime->sub($dateInterval)
?当时区在夏末和其他奇怪的事情发生时,它总是会吸引你。罗伯特的评论和回答是正确的。只需使用适当的函数即可。@Robert,事实上,我用这种方法来修复这样的错误…@Jakumi 28 ecotober 2018是DST日…就像我说的,如果我不在symfony,我的代码就可以工作了。。。我用这两行代码设置subDateIntervalToDatetime函数的快捷方式($temp=clone($dateTime);返回$temp->sub($dateInterval)date.timezone
,您可以始终使用
new DateTime('2018-10-28 02:00:00',new DateTimeZone('utc'))指定时区
,因此我只需使用DateTime->sub()设置代码的快捷方式,就不会再接触时区了。。。还是有同样的问题:/我想我现在明白了。。。2018年10月28日是dst日。。。所以理论上2018-10-28 02:00:00==2018-10-28 03:00:00。。。当我做2018-10-28 02:00:00减去10分钟,php做2018-10-28 03:00:00减去10分钟。。。这就是为什么我尝试使用时间戳来修复此问题。。。所以时间戳没有时区。。。而且它总是utc。。。获得两个时间戳,并重新应用时区应该是可行的,但不是!只要使用这段代码,您就可以确保您的日期时间是utc,并且可以使用方法和oop而不是老式的时间戳计算
0 2019-01-01 02:20:00 -> 2017-01-21 02:20:00
1 2019-01-01 02:10:00 -> 2017-01-21 02:20:00
2 2019-01-01 02:00:00 -> 2017-01-21 02:20:00
3 2019-01-01 01:50:00 -> 2017-01-21 02:20:00
4 2019-01-01 01:40:00 -> 2017-01-21 02:20:00
5 2019-01-01 01:30:00 -> 2017-01-21 02:20:00
6 2019-01-01 01:20:00 -> 2017-01-21 02:20:00
7 2019-01-01 01:10:00 -> 2017-01-21 02:20:00
8 2019-01-01 01:00:00 -> 2017-01-21 02:20:00
9 2019-01-01 00:50:00 -> 2017-01-21 02:20:00
10 2019-01-01 00:40:00 -> 2017-01-21 02:20:00
11 2019-01-01 00:30:00 -> 2017-01-21 02:20:00
12 2019-01-01 00:20:00 -> 2017-01-21 02:20:00
13 2019-01-01 00:10:00 -> 2017-01-21 02:20:00
14 2019-01-01 00:00:00 -> 2017-01-21 02:20:00
15 2018-12-31 23:50:00 -> 2017-01-21 02:20:00
16 2018-12-31 23:40:00 -> 2017-01-21 02:20:00