2013-04-09 79 views
0

我搜索了高和低,并已找到很多答案,但没有任何切割和干我的情况。 我正在为一个简单的时间表(PHP/MYSQL)只为几个员工。只有几个字段输入“位置”“描述”“时间”“超时”。我需要做的是花时间和超时,并找出多少小时。为了显示的目的,我使用timein/timeout的下拉列表,这些值是从strtotime()函数每半个小时递增一次创建的。PHP/MYSQL时间表计算从进出的小时

echo '<select name="timein">'; 
$start=strtotime('7:00am'); 
$end=strtotime('8:00pm'); 
for ($i=$start;$i<=$end;$i+=1800) 
{echo '<option value="'.date('g:i a',$i).'">'.date('g:i a',$i).'</option>';} 
echo '</select>'; 

,当我尝试插入那些到我的数据库我得到一个不正确的时间值误差(我应该有timein为VARCHAR?)尽管如此我只是需要一种方法来采取timein(上午9:00),超时( 2pm),并从中获得5个小时。

mysql_query("INSERT INTO sheet(employee, date, location, description, timein, timeout) 
VALUES('$employee', NOW(), '$location', '$description', '$timein', '$timeout')")or die(mysql_error()); 
  • 雇员VARCHAR(30)
  • 日期日期
  • 位置文本
  • timein时间
  • 超时时间
  • timespent INT(10)
  • totalhours INT(10)
+0

根据您创建列的方式,我不认为时间戳的格式是正确的。你能向我们展示查询和表格结构吗? – 2013-04-09 16:15:22

+0

也缺少值=“” – 2013-04-09 16:15:53

回答

0

您缺少</option>,您的选项没有价值,只是一个标签。

<select>应该是这样的:

<select name="timein"> 
    <option value="0">8:00am</option> 
    <option value="1">9:00am</option> 
    <option value="2">10:00am</option> 
    <option value="3">11:00am</option> 
    <!-- etc --> 
</select> 
0

您的日期列期待像'0000-00-00'但MySQL的函数now()返回时间戳像'0000-00-00 00:00:00'尝试CURDATE()代替。

另外你的日期格式不正确的是MySQL对Time的期望。 '00:00:00' 您应该在为每个选项创建值时尝试date("H:i:s", $i)。您仍然可以使用文本部分的日期格式。 (用户会看到的文字。)

+0

谢谢。我发现无论使用NOW()还是CURDATE(),dbase都显示4/9/2013 12:00:00 AM。时间的事情确实有帮助,现在我的dbase显示15:00:00而不是下午3:00,仍然需要弄清楚如何计算工作时间。 – 2013-04-09 21:29:09

+0

只需减去。 $超时 - $ timein = timeworked(以秒为单位)只需使用日期功能对其进行格式化即可按照您所需的格式显示它。 – jmm 2013-04-09 22:24:21