我正在使用PHP Codeigniter
我有桌面用户,其字段平衡日期类型为 ENUM('是','否')。我还有一个名为reset_date的字段,用于存储用户余额设置为yes的日期。所以我想要计算30天,30天后想要再次将用户余额重置为否。因此,对于每个用户,如果他的余额用户设置为是,那么我想计算30天并在30天后重置余额。
我将当Balance设置为yes时存储当前日期:
if($this->input->post('balance') === "Yes")
{
$key= $this->session->userdata('key');
$this->reseller_m->deduct($key);/// pass youe id here
$this->load->helper('date');
$this->db->set('reset_date',unix_to_human(now()));
$this->db->where('id',$id);
$this->db->update('users', $data);
}
答案 0 :(得分:1)
替代解决方案:
您可以在没有cron作业的情况下执行此操作:只需使用名为balance_timestamp的列,该列是字段设置为yes时的时间戳。如果没有设置(null
),则表示没有。
现在,只需拨打SELECT .. WHERE balance="Yes"
,而不是SELECT .. WHERE balance_timestamp>NOW()-30
,即可返回过去30天内设为是的所有项目
或者,您可以调用字段balance_validuntil
并将其设置为NOW()+30
。这样可以更轻松地选择:SELECT .. WHERE balance_validuntil>=NOW()
这是用于编写的代码。
if($this->input->post('balance') === "Yes")
{
$key= $this->session->userdata('key');
$this->reseller_m->deduct($key);/// pass youe id here
$this->load->helper('date');
$this->db->set('balance_validuntil',unix_to_human(now()+30));
$this->db->where('id',$id);
$this->db->update('users', $data);
}
}
选择:
$this->db->select('*');
$this->db->where('balance_validuntil >=', unix_to_human(now()));