Базе данных около четырех лет, поэтому локальные значения даты и времени (для трех разных переменных) представлены как в летнее время, так и в стандартное время, в зависимости от того, когда происходит переключение.Как мне перевести все значения даты и времени (2019-05-21 21:31:45) из CST / CDT в UTC, учитывая даты, которые были изменены с -6 часов до -5 часов?Последующий вопрос заключается в том, как убедиться, что пользователь видит только свое местное время?
Я смотрел;
Update `NetLog-test` SET logdate = DateADD(hour, +6, logdate );
Но мне кажется, это изменит ВСЕ значения logdateбез учета того, когда CDT изменился на CST.В моем PHP-файле я делал то, что вы видите ниже, чтобы контролировать то, что пользователь видел и с чем работал.Я просто изменил значение CONST_SERVER_TIMEZONE с EDT на CDT в соответствующий день.Не очень хороший выбор, который я сейчас понимаю.
define('CONST_USER_TIMEZONE', 'America/Chicago');
/* server timezone */
define('CONST_SERVER_TIMEZONE', 'EDT'); /* CDT for standard time, EDT for daylight */
/* server dateformat */
define('CONST_SERVER_DATEFORMAT', 'Y-m-d H:i:s');
function now($str_user_timezone = CONST_USER_TIMEZONE,
$str_server_timezone = CONST_SERVER_TIMEZONE,
$str_server_dateformat = CONST_SERVER_DATEFORMAT) {
// set timezone to user timezone
date_default_timezone_set($str_user_timezone);
$date = new DateTime('now');
$date->setTimezone(new DateTimeZone($str_server_timezone));
$str_server_now = $date->format($str_server_dateformat);
// return timezone to server default
date_default_timezone_set($str_server_timezone);
return $str_server_now;
}
$open = now(CONST_USER_TIMEZONE,CONST_SERVER_TIMEZONE,CONST_SERVER_DATEFORMAT);