我正在写一个时间记录程序的客户,谁是钢琴调音师,我已经写了下面的PHP代码给创纪录的“做”状态:时间计算与MySQL
$last_tuned = '2017-01-05';
$tuning_period = 3;
$month_last_tuned = date('Y-m', strtotime(date('Y-m-d', strtotime($last_tuned))));
$next_tuning = date('Y-m', strtotime($month_last_tuned.(' +'.$tuning_period.' months')));
if (time() > strtotime($next_tuning.' -1 months')) {
if (time() > strtotime($next_tuning)) {
return 'late';
} else {
return 'upcoming';
}
}
如您所见,$last_tuned
变量是日期(YYYY-MM-DD)格式。然后将其转换为(YYYY-MM)格式。
一旦被转换,再增加一个月,与$tuning_period
相同,然后被添加到$month_last_tuned
变量中,给我们一个月和年的值,以便我们需要添加新记录。
如果当前时间(与time()
一起找到)大于$next_tuning
变量 - 1个月,则返回该任务为upcoming
。如果它位于$next_tuning
变量之后,则返回该任务为late
。
我现在必须编写一个MySQL查询来列出即将到来或已晚归还的项目。
我该怎么写这个在MySQL?我对MySQL的功能不是很满意,有些帮助会非常感谢。
我在逻辑尝试:
SELECT * FROM records
// The next lines are to get the most recent month_last_tuned value and add the tuning_period variable
WHERE
NOW() > (SELECT tuning_date FROM tunings ORDER BY tuning_date ASC LIMIT 1)
+
(SELECT tuning_period FROM records WHERE records.id = INITIAL CUSTOMER ID)
我知道,这是完全错误的。虽然逻辑很多。
我的数据库架构如下:
我期待的行从查询返回的是在标准杆与在PHP代码上面的“晚”或“即将到来的”值。这意味着返回的行将在其下一个调整日期的1个月内(根据上次调整加上调整周期计算)。
谢谢!
挂起,那'$ month_last_tuned'行...你是否将'$ last_tuned'转换为一个时间,然后转换为'date()',然后*返回*时间,所以你可以将它格式化为'日期'再次没有“日”部分??? –
更新你的问题添加表模式..一个适当的数据样本和预期的结果..请 – scaisEdge
@NiettheDarkAbsol - 这是将某种格式的时间戳转换为另一种格式?有一个更好的方法吗? –