几个小时以来,我一直在为此挠头,并决定寻求帮助。
我正在使用 javascript 日历来允许用户选择日期和时间。现在我希望这个时间与他们的时区相关(我已经记录在数据库中)。但是我不知道如何存储输入。我知道我需要调整 mktime 将吐出到用户时区的 UTC 时间戳,但我遇到了麻烦。
这是我尝试过的:
$time = $_POST['datetime']; // Dont worry I will sanitize the input
echo $time.'<br>';
$timezone = "Canada/Pacific"; // Just an example, this will be taken from the database
$timestamp = mktime($hours, $minute, 0, $month, $day, $year); // Based on $time, I just ignored my steps to get the hours etc here
date_default_timezone_set($timezone);
echo 'Your timezone: '.date("F j Y h:i:s A", $timestamp).'<br />';
date_default_timezone_set('UTC');
echo 'UTC: '.date("F j Y h:i:s A", $timestamp);
当我执行上述操作时,我得到的输出是:
30 October 2013 - 01:00 AM
Your timezone: October 29 2013 11:00:00 PM
UTC: October, 30 2013 06:00:00 AM
问题是,虽然用户输入 1:00 AM,但我希望 mktime 将其转换为 1:00 的 UTC 时间戳,但它似乎被转换为实际为 6:00 AM 的 UTC 时间戳。我不知道 5 小时的差异是从哪里来的,我不想在那里编写静态的 5 小时差异。
不过,在修复之后,我想将时间戳保存为已调整的 UTC 时间戳,以便将来获取时间戳并执行以下操作:
$timezone = "Canada/Pacific";
date_default_timezone_set($timezone);
echo 'Time: '.date("F j Y h:i:s A", $timestamp); // $timestamp from the database
它应该输出:
30 October 2013 - 01:00 AM
任何帮助表示赞赏!