【问题标题】:php/mysql - date_format and the time portionphp/mysql - date_format 和时间部分
【发布时间】:2010-11-19 07:39:58
【问题描述】:

抱歉,如果这已经回答了很多次,但我找不到答案,我很困惑。

我有一个 mysql 查询,当我在数据库中运行它时,它似乎输出了我想要的结果 - 但是当我通过 PHP 运行查询时,它没有正确输出。

在数据库中,日期是这样存储的:

2009-08-13T00:00:00

我想要做的不是显示早于今天日期的数据。所以,在 where 子句中是这样做的:

        WHERE dateField1 >= DATE_FORMAT(now(),'%Y-%m-%d') AND dateField2 >= DATE_FORMAT(now(),'%Y-%m-%d')

我的目的是去掉时间部分,因为我一直在努力寻找一种将 now() 的时间部分转换为午夜的方法。

当我在 PHPMyadmin 上运行它时,这似乎可以工作,但是当我运行 php 脚本时它却不行。

有什么想法吗?

非常感谢!

【问题讨论】:

  • 你能在你的 mysqli_query 中添加 - or die(mysqli_error($link) 吗?
  • @Lyndsey - 如果这解决了您的问题,请勾选答案。

标签: php mysql timestamp phpmyadmin date-format


【解决方案1】:

当我在 PHPMyadmin 上运行它时,这似乎可以工作,但是当我运行 php 脚本时它却没有。

您没有使用sprintf 之类的东西来构建字符串是吗?如果是这样,您需要使用另一个 % 转义 %

无论如何,你都可以使用函数DATE()

WHERE `dateField1` > DATE(NOW())

【讨论】:

  • (她红着脸)又想多了。你说的对。使用 DATE(NOW()) 相当容易 - 谢谢!
【解决方案2】:

nickf 是对的。我同意这一点。

如果使用 sprintf() 函数进行 SQL 调用,您可以将查询变成这样:

  $query = sprintf("SELECT * FROM SOME_TABLE WHERE id=%s AND dateField1 >= DATE_FORMAT(now(),'%%Y-%%m-%%d') AND dateField2 >= DATE_FORMAT(now(),'%%Y-%%m-%%d')", $id);
//Then submit $query for SQL query processing...

PHP 在使用 sprintf() 时将 % 视为类型说明符。

要避免这种情况,您需要在 MySQL 格式字符串前面再添加一个 %,即 %%Y 或 %%m 或 %%d。 MySQL 查询的实际输出将再次变为 %Y 或 %m 或 %d。

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2016-06-02
    • 2023-03-30
    相关资源
    最近更新 更多