【问题标题】:Determine if today's date is between 2 database dates [duplicate]确定今天的日期是否在 2 个数据库日期之间 [重复]
【发布时间】:2021-05-25 22:06:14
【问题描述】:

我知道以前有人问过这个问题,但我已经尝试了我找到的建议的解决方案,但没有任何效果。所以,这里是:

我有一个带有 2 个日期字段 sDate 和 eDate 的 mySQL 数据库。这些字段属于“日期”类型,并通过 HTML 表单输入,该表单的输入也是“日期”类型。我要做的是找出今天的日期是否在这两个日期之间,包括两个日期。

$tdy = new DateTime(null, new DateTimeZone('America/Chicago'));

foreach ( $conn->query("SELECT * FROM $table WHERE sDate <= $tdy AND eDate >= $tdy") as $row ) {

do some stuff

}

我得到的错误是:

致命错误:未捕获的错误:无法将类 DateTime 的对象转换为 /home/peaceful/www/www/kokr/pages/cal.php:13 中的字符串:堆栈跟踪:在 /home 中抛出 #0 {main} /peaceful/www/www/kokr/pages/cal.php 在第 13 行

第 13 行是 foreach。我也尝试了其他几种方法,但它们都抛出错误。我真的很想在这方面坚持使用 PHP。谁能告诉我我做错了什么?

【问题讨论】:

  • 为什么使用 PHP 的 DateTime 而不是 SQL 函数?

标签: php date mysqli


【解决方案1】:

您需要$tdy 代表的那个日期的字符串 表示。只需使用DateTime::format() 即可获取有效的日期字符串。

假设您的日期是 YYYY-MM-DD 格式:

$tdy = (new DateTime(null, new DateTimeZone('America/Chicago')))->format('Y-m-d');

我还会提到,正如 cmets 中所指出的,您需要在 SQL 中将字符串括在引号中:

$conn->query("SELECT * FROM $table WHERE sDate <= '$tdy' AND eDate >= '$tdy'")

Example

【讨论】:

  • 技术上你是正确的。哪种是最好的正确。 :)
  • 谢谢!这就是问题所在。我在比较苹果和橘子。感谢您及时的回复。我实际上有引号,我在输入时忘记了它们......
猜你喜欢
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
相关资源
最近更新 更多