Php 生成在不同时区和DST上工作的计划

Php 生成在不同时区和DST上工作的计划,php,timezone,dst,Php,Timezone,Dst,我正在开发一个web应用程序,它可以指导人们提前起床,它可以在70天内为用户生成一个起床时间表。它们输入当前上升时间和目标上升时间。然后,上升时间每周减少一个设定值,直到达到目标时间。用户必须在预定时间登录网站并“签入” 考虑到当前登录用户的时区和DST,我对如何生成此计划有点不知所措 我的起始时区是“中立”UTC,下面是生成计划的代码(相当详细,但我仍处于实验阶段) 我计划将这些生成的时间戳存储在数据库中,并根据用户设置的时区动态转换它们。 然而,当我获取这些动态生成的时间戳并将其显示在DST

我正在开发一个web应用程序,它可以指导人们提前起床,它可以在70天内为用户生成一个起床时间表。它们输入当前上升时间和目标上升时间。然后,上升时间每周减少一个设定值,直到达到目标时间。用户必须在预定时间登录网站并“签入”

考虑到当前登录用户的时区和DST,我对如何生成此计划有点不知所措

我的起始时区是“中立”UTC,下面是生成计划的代码(相当详细,但我仍处于实验阶段)

我计划将这些生成的时间戳存储在数据库中,并根据用户设置的时区动态转换它们。 然而,当我获取这些动态生成的时间戳并将其显示在DST运行的区域时,会出现一个问题,下面是欧洲/贝尔法斯特的输出

1 1300695480 Mon Mar 21 08:18:00 2011
2 1300781880 Tue Mar 22 08:18:00 2011
3 1300868280 Wed Mar 23 08:18:00 2011
4 1300954680 Thu Mar 24 08:18:00 2011
5 1301041080 Fri Mar 25 08:18:00 2011
6 1301127480 Sat Mar 26 08:18:00 2011
7 1301213880 Sun Mar 27 09:18:00 2011 //schedule jumps ahead by an hour because of DST
8 1301299860 Mon Mar 28 09:11:00 2011
9 1301386260 Tue Mar 29 09:11:00 2011
10 1301472660 Wed Mar 30 09:11:00 2011
11 1301559060 Thu Mar 31 09:11:00 2011
12 1301645460 Fri Apr 1 09:11:00 2011
3月27日DST开始运行,我的日程提前了一个小时。这是生成此计划的错误方法吗?我如何创建一个每周减少一定数量的时间表,即使是在DST期间,并且如果用户在时间表期间突然移动了国家,那么该时间表可以灵活地转换为另一个时区


任何指针都将不胜感激。

您可以检查
日期('I',$timestamp)
,如果时间是DST,则返回1,如果不是,则返回0,如果是,则进行一些计算

谢谢,看来已经成功了。现在,我的逻辑是,以UTC格式生成从数据库读取的计划(如果用户更改时区,则为我提供一个基线),并设置用户时区。然后,如果时间戳在DST范围内,我会从中减去3600。这样做有效,只要记住在确定签入时间时使用原始时间戳而不是修改的时间戳,除非您也修改签入时间戳。
1 1300695300 Mon Mar 21 08:15:00 2011
2 1300781700 Tue Mar 22 08:15:00 2011
3 1300868100 Wed Mar 23 08:15:00 2011
4 1300954500 Thu Mar 24 08:15:00 2011
5 1301040900 Fri Mar 25 08:15:00 2011
6 1301127300 Sat Mar 26 08:15:00 2011
7 1301213700 Sun Mar 27 08:15:00 2011
8 1301299680 Mon Mar 28 08:08:00 2011
9 1301386080 Tue Mar 29 08:08:00 2011
10 1301472480 Wed Mar 30 08:08:00 2011
11 1301558880 Thu Mar 31 08:08:00 2011
12 1301645280 Fri Apr 1 08:08:00 2011
1 1300695480 Mon Mar 21 08:18:00 2011
2 1300781880 Tue Mar 22 08:18:00 2011
3 1300868280 Wed Mar 23 08:18:00 2011
4 1300954680 Thu Mar 24 08:18:00 2011
5 1301041080 Fri Mar 25 08:18:00 2011
6 1301127480 Sat Mar 26 08:18:00 2011
7 1301213880 Sun Mar 27 09:18:00 2011 //schedule jumps ahead by an hour because of DST
8 1301299860 Mon Mar 28 09:11:00 2011
9 1301386260 Tue Mar 29 09:11:00 2011
10 1301472660 Wed Mar 30 09:11:00 2011
11 1301559060 Thu Mar 31 09:11:00 2011
12 1301645460 Fri Apr 1 09:11:00 2011