php - MySQL时区困惑

标签 php mysql

我完全不知道插入到底是怎么回事。基本上,我试图通过以 UTC 格式将所有内容存储在数据库中然后根据用户信息转换为本地时区来做正确的事情。我有许多工作正常的查询,但这个插入查询却给工作带来了麻烦。

$adt = date('Y-m-d') . " " . $_POST['Time'];
echo $adt;
$tmp_dt = new DateTime($adt, new DateTimeZone($tz));
echo $tmp_dt->format('H:i:s');  
$tmp_dt->setTimezone(new DateTimeZone('UTC'));
$UTC_time = $tmp_dt->format('H:i:s');
echo $UTC_time;

echo 'date_default_timezone_set: ' . date_default_timezone_get() . '<br />';
mysql_select_db($db_name, $JewelryDB);
mysql_query("SET time_zone = '+00:00';");

$updateSQL = sprintf("INSERT INTO reminder_cfg 
                    (id, day_of, day_of_advance, day_prior, default_time, week_prior, 2_week_prior, 3_week_prior, 4_week_prior, 5_week_prior, day_after, 2_week_after, 50_day_after) 
                    VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
                    ON DUPLICATE KEY UPDATE day_of = %s, day_of_advance = %s, day_prior = %s, default_time = %s, week_prior = %s, 2_week_prior = %s, 3_week_prior = %s, 4_week_prior = %s, 5_week_prior = %s, day_after = %s, 2_week_after = %s, 50_day_after = %s",
                   GetSQLValueString($jeweler, "text"),
                   GetSQLValueString($_POST['DayOf'], "text"),
                   GetSQLValueString($_POST['Advance'], "text"),
                   GetSQLValueString($_POST['DayPrior'], "text"),
                   GetSQLValueString($UTC_time, "text"),
                   GetSQLValueString($_POST['WeekPrior'], "text"),
                   GetSQLValueString($_POST['2WeeksPrior'], "text"),
                   GetSQLValueString($_POST['3WeeksPrior'], "text"),
                   GetSQLValueString($_POST['4WeeksPrior'], "text"),
                   GetSQLValueString($_POST['5WeeksPrior'], "text"),
                   GetSQLValueString($_POST['DayAfter'], "text"),
                   GetSQLValueString($_POST['2WeeksAfter'], "text"),
                   GetSQLValueString($_POST['50DaysAfter'], "text"),
                   GetSQLValueString($_POST['DayOf'], "text"),
                   GetSQLValueString($_POST['Advance'], "text"),
                   GetSQLValueString($_POST['DayPrior'], "text"),
                   GetSQLValueString($_POST['Time'], "text"),
                   GetSQLValueString($_POST['WeekPrior'], "text"),
                   GetSQLValueString($_POST['2WeeksPrior'], "text"),
                   GetSQLValueString($_POST['3WeeksPrior'], "text"),
                   GetSQLValueString($_POST['4WeeksPrior'], "text"),
                   GetSQLValueString($_POST['5WeeksPrior'], "text"),
                   GetSQLValueString($_POST['DayAfter'], "text"),
                   GetSQLValueString($_POST['2WeeksAfter'], "text"),
                   GetSQLValueString($_POST['50DaysAfter'], "text"));

$Result1 = mysql_query($updateSQL, $JewelryDB) or die("Insert query error: " . mysql_error());

代码中的 echo 语句显示我的时区转换按预期工作,但插入语句以某种方式减去 5 小时以插入本地时区的时间。这是一个共享/托管服务器,所以我不能简单地将系统时间设置为 UTC。我认为 MySQL“SET time_zone”会纠正这个问题。

请帮忙。这让我抓狂。

最佳答案

Mysql 区分了timestamp 数据类型和容易混淆的datetime 数据类型。 datetime 类型有一个隐式时区(由您根据窗外的天气定义),而 timestamp 类型中存储的值被隐式转换为 unixtime(UTC ).如果您希望时区转换保持不变,您应该将您的值存储为 datetime 而不是 timestamp

关于php - MySQL时区困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15658497/

相关文章:

php - 为什么 asort 与多维数组一起使用?

javascript - PHP:从数据列表中打印(循环困难)

php - WordPress:仅显示 future 的帖子减去一天

php - 提交表单后,所有行均采用一个值

PHP JSON 数组问题

php - 语法错误 T_PAAMAYIM_NEKUDOTAYIM!

php - 表单不会将数据提交到 MySQL 数据库

MySQL 导出命令不输出任何内容

PHP:意外行为:foreach ... {$array ['country' ][] = $value ['country' ]}

mysql - 是否可以在mysql中按几个不同的日期时间段进行分组?