在PHP中比较数据字段和本地时间



我正在从本地服务器提取日期:

$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或其他无意义的附加。时区就变成了表示层的专属领域。

相关内容

  • 没有找到相关文章

最新更新