【问题标题】:strtotime & datediffstrtotime & datediff
【发布时间】:2018-01-30 21:05:03
【问题描述】:

我想请你帮忙解决我的问题。

我当前的代码:

require_once 'MysqliDb.php';
$db = new MysqliDb('localhost', 'xy', 'xy', 'xy');
$users = $db->rawQuery('select * from police where datediff(skadenca,current_date())=30');

所以现在我选择当前日期为 +30 天的所有查询...但问题是因为我想使用该脚本所以也为生日发送短信,我需要以某种方式忽略 current_date() 中的年份...所以我可能想选择完整日期,但 strtotime 并删除年份,所以我只需要日和月...

有什么快速的解决方案吗?

抱歉,我还在学习 php 和 sql,所以我的问题可能听起来很愚蠢?

感谢所有回答

【问题讨论】:

  • 您使用的是哪个 dbms? (该查询是特定于产品的。)
  • 我不知道你到底在问我什么,但我有定期共享主机,所以 php、apache、mysql、phpmysqladmin ...
  • MySQL 是一个 dbms!
  • aha 好的,所以我的 dbms 是 MySQL :) 现在怎么办? :)

标签: php mysql strtotime datediff


【解决方案1】:

您可以从日期中提取月份和日期(在当前日期加上 30 天后),然后进行比较:

where date_format(skadenca, '%m%d') = 
      date_format(date_add(current_date(), interval 30 day), '%m%d')

但是请注意,如果生日是 2 月 29 日,则可能没有匹配的年份。

生日本身

你可以使用这个比较:

where date_format(skadenca, '%m%d') = date_format(current_date(), '%m%d')

要匹配生日为 2 月 29 日且当前年份不是闰年的日子,请扩展为:

where (date_format(skadenca, '%m%d') = date_format(current_date(), '%m%d')
    or date_format(skadenca, '%m%d') = '0229' and dayofyear(current_date()) = 60)

当生日是 2 月 29 日且当前年份不是闰年时,这将匹配 3 月 1 日。

在您的代码中,它应该如下所示——它使用了一个字段 rojstvo,就像您在 cmets 中提到的那样:

$users = $db->rawQuery("
    select * from police 
    where (date_format(rojstvo, '%m%d') = date_format(current_date(), '%m%d')
        or date_format(rojstvo, '%m%d') = '0229' and dayofyear(current_date()) = 60)
");

【讨论】:

  • 这个月 31 日的生日会更成问题...仅适用于生日是 8 月 31 日。
  • 当然有,对于 15.3 它可以工作。我只是想知道如何处理上个月不存在的月份的日子。
  • 哦,我以为你想要的是同一天,但前一个月。我已经用第二部分更新了我的答案,以匹配同一天和同一个月。
  • 这似乎无关。可以不用 PHP 直接在 phpMyAdmin 工具中执行吗?
  • 这样就解释了 500 错误——确保在 PHP 代码中包含正确的错误处理。您的尝试一定有错误,而我提供的小提琴中没有。检查错误在哪个位置。通常,MySql 在错误消息中提供更多上下文(“near ...”)。您使用的是哪个版本的 MySql?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
相关资源
最近更新 更多