【问题标题】:How to get record from table which contain date field in unix timestamp?如何从包含 unix 时间戳中日期字段的表中获取记录?
【发布时间】:2012-12-14 14:47:01
【问题描述】:

我使用 PHP 中的 time() 函数存储我的日期。我的程序中有一个搜索部分。日期字段由 jquery datepicker 完成。这是我的日期格式,例如:14/12/2012。

问题是表中的字段是时间戳。如何使用 MySQL 查询从这个日期字符串中选择实际日期?

我使用 codeigniter 作为框架。有什么功能可以做到吗?

请帮帮我。

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:
    PHP 中的

    time() 只返回一个 unix 时间戳 - 自 1970 年 1 月 1 日以来的秒数。 MySQL 时间戳、日期和日期时间字段与该值不直接兼容,但您可以轻松地在两者之间进行转换:

    SELECT UNIX_TIMESTAMP(yourtimestampfield) AS php_compatible_time_value, ...
    

    注意 MySQL 的日期字符串格式是yyyy-mm-dd。除非您转换为 MySQL 的预期格式,否则您不能使用 dd/mm/yyyy 格式。

    【讨论】:

    • 感谢 Marc B,但实际上 Edga 发布了我需要的内容,但它产生了一些问题。
    【解决方案2】:
    $date = '14/12/2012';
    $d = explode('/',$date);
    $timestamp = mktime(0, 0, 0, $d[1], $d[0], $d[2]); 
    

    然后你在查询中使用 $timestamp

    当然,对于英国/美国等不同格式的日期,您需要不同的方法。mm/dd/yyyy 或 dd/mm/yyyy

    【讨论】:

    • 我在发布日期(如 2012 年 11 月 30 日)时尝试了您的代码,根据您的代码,我得到了类似 1354230000 的时间戳,但数据库中的时间戳为 1354272207,因此它与存储的时间不匹配桌子。有没有其他方法可以做到这一点?
    • 记住,时间戳包括小时/分钟/秒。上面的 mktime 使用午夜(12:00:00am)作为时间,而您的数据库时间戳使用的是一天中的其他时间。
    • 是的,我知道你能告诉我该怎么做吗?
    • UNIX_TIMESTAMP(DATE(FROM_UNIXTIME(youttimestampfield))) 将返回时间戳而不查看小时/分钟/秒(意思是 00:00:00)
    • @Arunkumar:sargable 谓词的形式为:WHERE t.mytimestampcol >= '2012-11-30' AND t.mytimestampcol < DATE_ADD('2012-11-30',INTERVAL 1 DAY)
    猜你喜欢
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    相关资源
    最近更新 更多