0

编辑部分答案:

基本上,我只想选择今天的行,而不是过去 24 小时,我想选择 7 月的行,而不是过去 31 天(7/1/13 -> 7/31/13,而不是 6/25/13 - > 2013 年 7 月 25 日)。

这就是我用来仅选择今天的行的方法。我使用 America/Los_Angeles 作为用户指定时区的占位符(将使用 PHP 填写)。下面使用的“时间戳”只是创建行时的标准 MySQL 时间戳。

SELECT * FROM table 
WHERE convert_tz(timestamp, 'UTC', 'America/Los_Angeles') 
>= DATE(convert_tz(NOW(), 'UTC', 'America/Los_Angeles'));

对于一周的记录,我仍然会使用用户时区中的当前日期,DATE(convert_tz(NOW(), 'UTC', 'America/Los_Angeles'))但我不确定如何从中获取一周的第一天,例如,今天的日期返回 13 年 7 月 25 日,但第一天本周是 2013 年 7 月 21 日。

对于月份,我可以取今天的日期,使用 MONTH() 函数只获取月份,然后通过执行创建一个新的 Date 对象

str_to_date(
      concat( MONTH( [today's date from above] ), 
             ' 01', 
             ' 2013'),
      '%m %d %Y'
)

这将给我这个月的第一天。如果需要,今年的行也可以这样做。

无论如何,这只会留下本周创建的行。WEEKDAY() 可能有用,但我不确定。

4

1 回答 1

1

“自午夜”是没有时间的当前日期。不带时间的当前日期的 MySQL 函数是CURDATE(),将日期、时间或时间戳转换为 UNIX 值的函数是UNIX_TIMESTAMP

SELECT * FROM your_table
WHERE Ftimestamp_column > UNIX_TIMESTAMP(CURDATE());

另请注意,PostgreSQLdate_trunc函数的 MySQL 等效项是DATE().

于 2013-07-25T04:36:12.300 回答