【问题标题】:matching dates-birthdays匹配日期-生日
【发布时间】:2011-04-29 01:47:09
【问题描述】:

我正在执行 mysql 查询并尝试获取与当前日期和月份匹配的生日。

这是我正在尝试但意识到它无法正常工作的方法:

$birthdays = $wpdb->get_results(" SELECT * FROM {$wpdb->usermeta} WHERE meta_key = 'birthday' AND meta_value >= UNIX_TIMESTAMP(DATE(NOW()))");

如果生日在今年,这当然会拉生日(不是我需要的)。生日在数据库中存储为 1304035200

任何帮助将不胜感激。我已经阅读了许多相关的帖子,但它们对我的需要没有帮助。

【问题讨论】:

  • FWIW:1304035200 = UTC 时间 2011 年 4 月 29 日星期五 00:00:00。

标签: unix-timestamp date


【解决方案1】:

最简单的方法可能是将 unix 时间戳转换为日期,并将其月份和日期值与今天的月份和日期值进行比较。我在我的 iPhone 上,所以请原谅格式/错别字,但我认为以下应该可以工作(在她购物时等待妻子 :))

SELECT * FROM {$wpdb->usermeta} WHERE meta_key = 'birthday' AND ((MONTH(FROM_UNIXTIME(meta_value)) = MONTH(DATE(NOW()))) AND (DAY(FROM_UNIXTIME( meta_value)) = DAY(DATE(NOW())))))

【讨论】:

  • 使用 $birthdays = $wpdb->get_results(" SELECT * FROM {$wpdb->usermeta} WHERE meta_key = 'birthday' AND ((MONTH(FROM_UNIXTIME(meta_value) ) = MONTH(DATE(NOW()))) AND (DAY(FROM_UNIXTIME(meta_value)) = DAY(DATE(NOW()))))");
  • 我的直觉是服务器时间与生日不同。您的服务器上 DATE(NOW()) 的值是多少?我不在我的电脑前,所以我无法对此进行测试,但我认为您可以执行以下操作并查看值:SELECT DAY(DATE(NOW())), MONTH(DATE(NOW())), DAY(FROM_UNIXTIME(1304035200)), MONTH(FROM_UNIXTIME(1304035200));
  • 你试过我刚刚发布的 SQL 了吗?它输出了什么?我们只是将月份和日期与我发布的代码进行比较,所以年份应该无关紧要。 UNIX_TIMESTAMP 只是自 1970 年 1 月 1 日以来的秒数,因此它将使用您的原始代码查找未来的所有生日。
  • 我确实在服务器上设置了给定日期之前和之后的生日,它们都具有相同的年份……它们都将使用我的原始代码提取和显示。我只想要今天而不考虑年份
  • 所以我刚刚对我的 sql 服务器运行了查询,我得到了 DATE(NOW()) 和 FROM_UNIXTIME(1304035200) 的正确日期和月份(29 和 4)。您是否能够仅在数据库上执行原始查询的 SQL 部分(无需通过 wpdb)?
【解决方案2】:
select * from table where from_unixtime(field,'%m-%d') = right(curdate(),5)

$birthdays = $wpdb->get_results(" SELECT * FROM {$wpdb->usermeta} WHERE meta_key = 'birthday' and from_unixtime(meta_value,'%m-%d') = right(curdate(),5) "); 

【讨论】:

  • 不确定这是否有助于解释,但这会拉出所有生日 $birthdays = $wpdb->get_results(" SELECT * FROM {$wpdb->usermeta} WHERE meta_key = 'birthday' ") ;
  • 对不起。我不知道wordpress。我的方法是正确的,但我不知道表格的结构。你确定有今天出生的人吗?
  • 我很积极。如果我恢复到我的原始代码并且年份相同,它会取消生日。该表只是 meta_key = 生日,而 meta_value 是将生日存储为 1304035200
  • 我不知道该说什么。 select from_unixtime(1304035200,'%m-%d') = right(curdate(),5) 返回 1。这意味着如果您有一条带有该 unix 时间戳的记录,则查询必须返回它。再见。
  • 我有 1 个,如果我将它与两个相同年份一起使用,它会返回它,但不是每个人都出生在同一年 $wpdb->get_results(" SELECT * FROM {$wpdb-> usermeta} WHERE meta_key = 'birthday' AND meta_value >= UNIX_TIMESTAMP(DATE(NOW()))");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-29
  • 1970-01-01
相关资源
最近更新 更多