微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 时间变化后的time()和date()问题(DST – 标准)

PHP中,我想输出一个HTML选项列表,其中包含接下来14天的日期.

这些约会总是在18点:

$today_day = date('d');
$today_month = date('m');
$today_year = date('Y');
$date_entry = mktime(18, 00, 00, $today_month, $today_day, $today_year);
$optionsstr = '<select name="date">';
for ($d = 1; $d < 14; $d++) {
    $date_entry_temp = $date_entry+86400*$d;
    $optionsstr .= '<option value="'.$date_entry_temp.'">'.date('d.m.Y', $date_entry_temp).'</option>';
}
$optionsstr .= '</select>';
echo $optionsstr;

然后,用户可以从其中一个日期中进行选择并提交表单.然后将选定的时间戳插入数据库.

所以我的数据库中有一些条目.

在另一页上有一个当前约会列表:

MysqL_query("SELECT id, name FROM appointments WHERE date_time = ".time());

所以在18点钟应该有一些输出,因为那天数据库中有条目.这非常有效,直到时间从DST变为标准时间,反之亦然.确实是错的:

约会分别显示一个小时太晚或太晚.

我怎么解决这个问题?

解决方法:

mktime()创建一个unix时间戳. unix时间戳是从1970年1月1日00:00:00 GMT 0000开始的秒数.(格林威治时间)

当您将时区设置为“Europe / Berlin”时,时区为GMT 0100(冬季)或GMT 0200(夏季).这意味着当您有DST时,约会的格林威治时间会改变一个小时.这意味着更改前的第一个约会和更改后的下一个约会之间的时间不是24小时,而是23或25.但是,您通过添加86400秒= 24小时来生成约会.

您可以使用DateTime对象和add()方法.它需要考虑DST更改.

// create a new date object with todays date
$date = new DateTime();
// set the time to 18:00
$date->setTime(18,0,0);
$optionsstr = '<select name="date">';
for ($i = 0; $i < 14; $i++) {
    // add 1 day
    $date->add(new DateInterval('P1D'));
    $optionsstr .= '<option value="'.$date->format('U').'">'.$date->format('d.m.Y').'</option>';
}
$optionsstr .= '</select>';
echo $optionsstr;

有关更多信息,请参见http://www.php.net/manual/en/datetime.add.php.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐