Php 如何使用Mysql时间戳创建日期范围查询?
这里需要一点帮助,我希望你能帮我解决我的简单问题 我有一个由商店数据组成的表。在我的PHP页面中,用户可以注册他们的商店。 在注册中,用户注册其帐户的当天将保存在数据库表中,并将格式化为时间戳 我对此没有异议。在我的后端页面中有一个用于高级搜索方法的表单。在我的表单中,有一个下拉字段,旁边有一个日期选择器,格式为mm/dd/yyyy,因此我有一个2个日期选择器,用于从和到 我的问题是: 我使用PHP中的strottime()函数格式化了datepicker结果。我有一个这样的问题Php 如何使用Mysql时间戳创建日期范围查询?,php,mysql,sql,timestamp,Php,Mysql,Sql,Timestamp,这里需要一点帮助,我希望你能帮我解决我的简单问题 我有一个由商店数据组成的表。在我的PHP页面中,用户可以注册他们的商店。 在注册中,用户注册其帐户的当天将保存在数据库表中,并将格式化为时间戳 我对此没有异议。在我的后端页面中有一个用于高级搜索方法的表单。在我的表单中,有一个下拉字段,旁边有一个日期选择器,格式为mm/dd/yyyy,因此我有一个2个日期选择器,用于从和到 我的问题是: 我使用PHP中的strottime()函数格式化了datepicker结果。我有一个这样的问题 $query
$query = "SELECT * FROM shops
WHERE status = '".$status."'
AND registered BETWEEN ('".$from." AND ".$to."')";
查询的示例输出为:
现在我有了$from和$to的时间戳结果。我如何在mysql中过滤它
好了,就这些。提前感谢。如果列
已注册
不在UNIX时间,您需要删除时间戳周围的引号,并且需要使用FROM UNIXTIME()。您需要删除时间戳周围的引号,并且需要使用FROM UNIXTIME()如果列已注册
不在UNIX时间内。我认为您需要使用\u UNIXTIME
$query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")";
我认为您需要使用来自UNIXTIME的
$query = "SELECT * FROM shops WHERE status = '".$status."' AND registered BETWEEN FROM_UNIXTIME(".$from.") AND FROM_UNIXTIME(".$to.")";
实际上,您应该在PHP中设置适当的
YYYY-MM-DD
字符串格式
基本上,很少有理由在MySQL中使用UNIX时间戳
因此,对每个datepicker to/from值执行如下操作:
$to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to);
$to = $to_datetime->format('Y-m-d');
$from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from);
$from = $from_datetime->format('Y-m-d');
然后在查询中使用它们:
$query = "SELECT * FROM shops
WHERE status = '".$status."'
AND registered BETWEEN ('".$from."' AND '".$to."')";
注意,我使用了PHP
DateTime
类,我强烈推荐它作为PHP中日期操作的go-to工具(以及它的相关类,如DateInterval
,DatePeriod
,DateTimeZone
,等等)您实际上应该在PHP中设置适当的YYYY-MM-DD
字符串格式
基本上,很少有理由在MySQL中使用UNIX时间戳
因此,对每个datepicker to/from值执行如下操作:
$to_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_to);
$to = $to_datetime->format('Y-m-d');
$from_datetime = DateTime::createFromFormat('m/d/Y|', $datepicker_from);
$from = $from_datetime->format('Y-m-d');
然后在查询中使用它们:
$query = "SELECT * FROM shops
WHERE status = '".$status."'
AND registered BETWEEN ('".$from."' AND '".$to."')";
请注意,我使用了PHPDateTime
类,我强烈推荐它作为PHP中日期操作的go-to工具(以及它的相关类,如DateInterval
、DatePeriod
、DateTimeZone
,等等)。PHP
// $t is the value you got from strtotime()
$FormattedDateTime = date('Y-m-d H:i:s', $t)
PHP
// $t is the value you got from strtotime()
$FormattedDateTime = date('Y-m-d H:i:s', $t)
好的,我试试看。谢谢。好的,我试试。谢谢。这不会有任何帮助,因为仍然需要在unix时间戳和MySQL日期时间格式之间进行转换。是的,我没有意识到。这不会有任何帮助,因为仍然需要在unix时间戳和MySQL日期时间格式之间进行转换。是的,我没有意识到。感谢Mike爵士提供了非常翔实的答案。我现在将尝试并研究此代码以供参考。谢谢。先生,我收到一个错误
致命错误:在@Jerielle中对非对象调用成员函数format(),似乎DateTime对象的创建不起作用(尽管这应该引发异常)。您能告诉我您将$datepicker\u传递给
或$datepicker\u的值传递给
(无论哪一个发生错误)?你有输入错误吗?好的,我把变量$convert\u from
和$convert\u to
传递给这个DateTime::createFromFormat
。那么它们有什么值呢?另外请注意,我在上面稍微修改了代码,将DateTime对象的时间部分设置为00:00:00
,不过这会改变您的错误。感谢Mike爵士提供了非常详细的答案。我现在将尝试并研究此代码以供参考。谢谢。先生,我收到一个错误致命错误:在@Jerielle中对非对象调用成员函数format(),似乎DateTime对象的创建不起作用(尽管这应该引发异常)。您能告诉我您将$datepicker\u传递给
或$datepicker\u的值传递给
(无论哪一个发生错误)?你有输入错误吗?好的,我把变量$convert\u from
和$convert\u to
传递给这个DateTime::createFromFormat
。那么它们有什么值呢?另外请注意,我在上面稍微修改了代码,将DateTime对象的时间部分设置为00:00:00
,不过这应该会改变您的错误。您实际上需要Y-m-dh:I:s
实现MySQL兼容性。您实际上需要Y-m-dh:I:s
实现MySQL兼容性。