我正在构建一个应用程序,它可以获取用户"本周"(在他们的时区)所做的所有条目。我使用将数据库中的所有输入时间存储为UTC/GMT时间
gmdate('U')
当我需要在他们的时区获取"本周"时,我的问题就出现了。在我考虑时区之前,我使用。。。
$startWeek = strtotime('monday this week 00:00')
$endWeek = strtotime('sunday this week 00:00')
并使用SQL语句搜索这两个变量之间的关系。
问题是,这两个变量使用的是服务器时间,所以它给出了服务器一周的开始和结束时间。
如果需要,我可以在cookie中访问用户时区(即:澳大利亚/墨尔本)。
最重要的是,我如何在我存储在cookie中的时区中以时间戳格式获取一周的开始和结束?
我认为date_default_timezone_set
功能符合您的要求:
http://www.php.net/manual/en/function.date-default-timezone-set.php
你需要从用户那里获得时区,然后用它调用函数
date_default_timezone_set('Melbourne/Australia');
如果你有一个中途的PHP安装,这将完成:
$usersTimezone = new DateTimeZone($timezone); // e.g. "Australia/Melbourne"
$time = new DateTime('monday this week 00:00', $usersTimezone);
$serversTimezone = new DateTimeZone('Servers Timezone'); // e.g. "UTC"
$time->setTimezone($serversTimezone);
$sqlTime = $time->format('Y-m-d H:i:s');