我创建了一个漫画,并有一个分配了日期的漫画页面数据库。我想获取最新日期的漫画,但不希望获得未来的漫画。
换句话说,如果today是2000年12月12日,我有以下漫画:
我将只能查询和获得漫画1和2。
到目前为止,我已经使用gettimeofday()函数完成了此工作,只是将其分配给变量并执行了MySQL查询。这是我现在正在获取最新(但不是未来)漫画的工作的简化版本。
$gtod1 = gettimeofday();
$today = date("Y-m-d");
$directory = "comics";
$sql_lastcomic = $conn->prepare("SELECT * FROM comics WHERE story = ? AND `date` <= ? ORDER BY `date` DESC, id DESC LIMIT 1");
$sql_lastcomic->bind_param('ss', $directory, $today);
Run Code Online (Sandbox Code Playgroud)
效果很好,除了我希望它始终查看我的时区,而不是用户的时区。这样,每个人都会同时发布更新。
我查看了的文档gettimeofday(),但不确定如何修改它。还是应该修改我的MySQL语句?假设我要使用山区时间作为我的时区。
对于美国/纽约时区
$today = new DateTime("now", new DateTimeZone('America/New_York') );
echo $today->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
正如@Karthik所说,您可以使用DateTimezone对象获取时区。
例:
$tz = 'America/New_York';
$tz_obj = new DateTimeZone($tz);
$today = new DateTime("now", $tz_obj);
$today_formatted = $today->format('Y-m-d');
$directory = "comics";
$query = "
SELECT *
FROM comics
WHERE story = ?
AND `date` <= ?
ORDER BY `date` DESC, id DESC
LIMIT 1"
$prepped = $conn->prepare($query);
$prepped->bind_param('ss', $directory, $today_formatted);
Run Code Online (Sandbox Code Playgroud)