gpt4 book ai didi

php - 时间更改后的 time() 和 date() 问题(DST - 标准)

转载 作者:可可西里 更新时间:2023-10-31 22:06:50 26 4
gpt4 key购买 nike

在 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 算起的秒数。 (格林威治时间)

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

您可以改用 DateTime 对象和 add() 方法。它考虑了夏令时的变化。

// 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获取更多信息。

关于php - 时间更改后的 time() 和 date() 问题(DST - 标准),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5964335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com