我正在从本地服务器提取日期:
$year = date("Y");
$day = date("d");
$month = date("m");
在我的MySQL数据库中,我有三个字段,dateday, datemonth和dateyear。
数据库值的格式为26,6,1971。
我想只选择日期等于今天或尚未过去的记录。
第二个问题,当服务器在英国时,我可以欺骗date()给出美国东部时间的日期吗?
谢谢! !
要搜索等于或大于今天的表行,可以使用以下查询:
SELECT * FROM your_table
WHERE DATE(CONCAT(dateyear, '-', datemonth, '-', dateday)) >= CURDATE()
如果您将PHP变量连接到PHP字符串中以创建查询,那么它将是这样的。
$query = "SELECT * FROM your_table
WHERE DATE(CONCAT(".$dateyear.", '-', ".$datemonth.", '-', ".$dateday.")) >= CURDATE()";
对于第二个问题,您可以使用此命令在PHP脚本中设置时区。
date_default_timezone_set('America/New_York')
同样,您可以在这里看到更多关于时区的信息支持的时区列表作用是信息
最终脚本
date_default_timezone_set('America/New_York');
$year = date("Y");
$day = date("d");
$month = date("m");
$query = "SELECT * FROM your_table
WHERE DATE(CONCAT(".$dateyear.", '-', ".$datemonth.", '-', ".$dateday.")) >= CURDATE()";
你不要欺骗date()
,你使用一个更有用的API。
$year = 1971;
$day = 26;
$month = 6;
$src_tz = new DateTimezone("Europe/London");
$dst_tz = new DateTimezone("America/New_York");
$d = new DateTime('', $src_tz);
$d->setDate($year, $month, $day);
$d->setTime(0, 0, 0);
$d->setTimezone($dst_tz);
var_dump($d->format('c'));
输出:
string(25) "1971-06-25T19:00:00-04:00"
裁判:https://www.php.net/manual/en/class.datetime.php
更广泛地说,你可以通过在一个时区存储和计算所有日期来简化你的生活,理想情况下是UTC,因为它没有DST或其他无意义的附加。时区就变成了表示层的专属领域。