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.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...