2012-04-10 66 views
1

霍拉傢伙php如何基於動態考勤系統

我在創建一個PHP網絡應用程序的地方,它允許管理員打勾誰上課。

我有以下數據庫

學期的開始日期,學期結束日期,艙位等級的日期和時間

數據,例如,

5 March 20129th April 2012Monday{9,12},Thursday{14,17}

我能得到周總基於開始和結束日期。現在問題在於我如何獲得課程假設的日期,比如週一,假設是9日,但是星期四?動態。

是否有任何PHP類或任何方法?

非常感謝

+0

爲什麼要以這種格式存儲數據:'星期一{9,12},星期四{14,17}'? – Matthematics 2012-04-10 15:39:11

+0

你只是問如何從字符串'Monday {9,12},星期四{14,17}''動態提取14和17?如果是這樣,請使用正則表達式。 – Matthematics 2012-04-10 16:13:35

回答

3

自己沒有實現的日期函數,有很多處理的日期時的陷阱。您可以使用strtotime通過使用如下字符串遍歷日期:strtotime("next Thursday", yourdate)

+0

非常感謝你,先試試這個,然後先把日期轉換成unix_timestamp。 – cicakman 2012-04-10 15:56:33

1

不確定在這一點上它是否容易改變您的數據的格式,但我會建議您構建數據庫的方式(這會大大簡化查詢您詢問有關信息)類型會是這樣的:

CREATE TABLE `student_attendance` (
    `student` INT(11) NOT NULL, 
    `class` DATETIME NOT NULL, 
    `attended` BOOLEAN NOT NULL, 
    PRIMARY KEY (`student`,`class`) 
) 

然後,查詢多少天學生參加,你會怎麼做:

SELECT COUNT(*) 
FROM `student_attendance` 
WHERE `student` = '1' 
AND `attended` = TRUE; 

當然,不知道更多關於EXA你試圖完成,我不能確定這是完全合適的。儘管你用來存儲數據的格式似乎會使你的生活變得毫無必要(你將不同的數據點合併成一個列;這是一個不允許的),所以我想這是一個改進。編輯:更確切地說,保存日期和時期(而不是日期和時間);編輯:更準確地說,保存日期和時期(而不是日期和時間);編輯:更準確地說,保存日期和時期(而不是日期和時間)。例如:

CREATE TABLE `student_attendance` (
    `student` INT(11) NOT NULL, 
    `class_date` DATE NOT NULL, 
    `class_period` TINYINT(4) NOT NULL, 
    `attended` BOOLEAN NOT NULL, 
    PRIMARY KEY (`student`,`class_date`,`class_period`) 
) 
+0

恩,有道理,但問題是他們可以在不同的日子和時間添加幾個班,在那個特定的時間,我認爲這將是最好的方式去,但顯然不是現在這樣! – cicakman 2012-04-10 15:57:55

+0

編寫重新格式化數據的腳本然後查詢重新格式化的數據可能會更容易。 ;) – Matthematics 2012-04-10 16:10:22