[英]Comparing dates in codeigniter & mySQL
我完全不知道自己無法弄清楚這一點,並且閱讀了我能得到的每一篇文章,但仍然一無所獲。 所以我希望有人能幫忙。
我有一張可以容納節目的桌子。 它有四個時間字段show_start
(HH:MM AM/PM)、 show_end
(HH:MM AM/PM)、 show_start_actual
(HH:MM:SS)、 show_end_actual
(HH:MM:SS)。 我還有 7 個以一周中的日子命名的列(周日、周一等)。 星期幾為 1 或 0 以注釋節目是否在該特定日期。 actual
的列采用 24 小時時間格式,其他時間是varchar
字段。
我正在嘗試撤回當前正在播放的節目。 時間非常基本(即上午 6:00 - 上午 10:00 等)。我在 PHP 和 MySQL 中嘗試過這個,我所做的一切都沒有工作。 我確信有一個簡單的解決方案。
這是我目前比較 PHP 中的時間的版本,但我認為如果我能真正將其拉回 mySQL 中會更有效。
Model
function on_air()
{
$current_time = $this->convert_to_hour(date('g:i a',now()));
$current_day_of_week = strtolower(date('l',now()));
$mySQL = $this->db->query("SELECT * FROM on_air_now");
if($mySQL->num_rows() > 0 ){
$mySQL = $mySQL->result();
foreach($mySQL as $row){
eval('$db_day_of_week = $row->'.$current_day_of_week.';');
$show_start = $this->convert_to_hour($row->show_start);
$show_end = $this->convert_to_hour($row->show_end);
if($current_time > $show_start && $current_time < $show_end && $db_day_of_week == 1){
// If true then go at the show tables to get info...
}
}
}else{
return FALSE;
}
}
function convert_to_hour($str){
$temp_arr = explode(":",$str);
$arr_cnt = count($temp_arr)-1;
$hour = $temp_arr[0];
$min = explode(" ",$temp_arr[$arr_cnt]);
$ampm = $min[1];
if($ampm == 'pm' || $ampm == 'PM'){
if($hour !== '12'){
$hour = $hour+12;
}
}else{
if($hour == '12'){
$hour = 0;
}
}
$new_time = $hour;
return $new_time;
}
更新數據:
id,"datetime","show_name","sub_name","show_start","show_end","show_start_actual","show_end_actual","day_of_week",sunday,monday,tuesday,wednesday,thursday,friday,saturday,id_personalities,active,"date_added"
1,"2011-06-29 11:33:46","DJ","DJ","06:00 am","10:00 am","06:00:00","10:00:00",NULL,NULL,1,1,1,1,1,1,0,1,NULL
2,"2011-06-29 11:33:46","DJ","DJ","12:00 pm","03:00 pm","12:00:00","03:00:00",NULL,NULL,1,1,1,1,1,NULL,0,1,NULL
3,"2011-06-29 11:33:46","DJ","DJ","09:00 am","12:00 pm","09:00:00","12:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,NULL
4,"2011-06-29 11:35:17","DJ","DJ","03:00 pm","06:00 pm","15:00:00","18:00:00",NULL,NULL,1,1,1,1,1,0,NULL,1,NULL
5,"2011-06-29 11:35:39","Scott Stevens","Scott Stevens","06:00 pm","09:00 pm","18:00:00","21:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,"2011-06-21 6:15:57"
6,"2011-06-29 11:37:03","DJ","DJ","09:00 pm","12:00 am","21:00:00","00:00:00",NULL,NULL,0,0,0,0,0,NULL,NULL,1,"2011-06-21 6:18:10"
7,"2011-06-29 11:37:17","DJ","DJ","12:00 am","06:00 am","00:00:00","06:00:00",NULL,NULL,1,1,1,1,1,NULL,NULL,NULL,NULL
這是表中的 CSV 轉儲。
首先,您可以從簡化數據庫設計開始。 下面是一個建議的替代方案。
CREATE TABLE `show` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`show_name` VARCHAR(64) NOT NULL,
`sub_name` VARCHAR(64) NOT NULL,
`show_start` DATETIME NOT NULL,
`show_end` DATETIME NOT NULL,
/* OTHER COLUMNS */
`datecreated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`dateupdated` TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
除非節目在一周內重復多次,否則您不需要一周的七欄。 只需使用MySQL function從show_start
本身獲取它。
完成后,使用 MySQL 或 PHP 即可輕松獲取所有當前節目。 例如,要使用 MySQL 獲取今天的所有節目,查詢將是
SELECT * FROM shows
WHERE DATE(NOW()) = DATE(`show_start`)
在上面的查詢中,還有很多 DATE 的替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.