2016-07-30 7 views
-1

MySQL Gesamt Login Stunden negativ werden am Nachmittag

Ich Speicherung Benutzer Gesamt Login Stunden, die ich zuerst die Speicherung der Anmeldezeit bei der Anmeldung erreichen und dann beim Abmelden speichere ich die time_out. Um die gesamten Login-Zeiten zu finden, benutze ich den folgenden Code. In den Morgenstunden sah alles gut aus, aber jetzt am Nachmittag werden die Gesamtanzahl und die Zeit negativ.

Hier ist mein login.php-Code, der die ersten Login-Daten Stunden Tabelle speichert:

date_default_timezone_set('America/New_York'); 
$chk = date("Y-m-d"); 
$result = mysql_query("SELECT * FROM hours WHERE member_id = '".$_SESSION['MEMBER_ID']."' AND member_name = '".$_SESSION['LOGIN_NAME']."' AND time_in LIKE '%".$chk."%'"); 
$dt = date("Y-m-d"); 
if(mysql_num_rows($result) == '0'){ 
mysql_query("INSERT INTO hours (member_id, member_name, team, time_in) VALUES ('".$_SESSION['MEMBER_ID']."', '".$_SESSION['LOGIN_NAME']."', '".$_SESSION['TEAM']."', '".$dt."')"); 
} 

jetzt die logout.php so Zeit beim Abmelden

$id = $_SESSION['MEMBER_ID']; 
date_default_timezone_set('America/New_York'); 
$dt = date("Y-m-d h:i:s"); 
$max = mysql_query("SELECT MAX(hours_id) FROM hours WHERE member_id = '".$id."'"); 
$row = mysql_fetch_row($max); 
$sql = "UPDATE hours SET time_out = '".$dt."' WHERE hours_id = '".$row[0]."'"; 
mysql_query($sql) or die(mysql_error()); 

aktualisieren Und hier ist, wie ich überprüfen Benutzer insgesamt Anmeldestunden für den Tag oder den ganzen Monat:

<?php 

$query = "select member_id, member_name, team, time_in, time_out, sec_to_time(unix_timestamp(time_out) - unix_timestamp(time_in)) AS totalhours from hours where member_id='7'"; 
$result = mysql_query($query)or die(mysql_error()); 
$rowNo = 1; //Increment Row Number 
$total_time="00:00:00"; 
while($row = mysql_fetch_assoc($result)){ 
$time = $row['totalhours']; 

$secs = strtotime($time)-strtotime("00:00:00"); 
$total_time = date("H:i:s",strtotime($total_time)+$secs); 


echo "<tr align='left'>";  
echo"<td><font color='white'>" .$rowNo++."</font>.</td>"; 
echo"<td><font color='white'>" .$row['member_name']."</font>.</td>"; 
echo"<td><font color='white'>" .date('Y-M-d - h:i:s a ', strtotime($row['time_in']))."</font>.</td>"; 
echo"<td><font color='white'>" .date('Y-M-d - h:i:s a ', strtotime($row['time_out']))."</font>.</td>"; 
echo"<td><font color='white'>" .$time." Hrs</font>.</td>"; 
echo "</tr>";   
} 

?>   
</table> 
<?php echo '<p align="right"><font size="4" color="black">Sub Total:</font> '.$total_time.' Hrs </p>'; ?> 

Was könnte wro sein ng hier, dass nach 12 Uhr die Zeit negativ wird und alle Login Stunden falsch angezeigt werden?

Hinweis: Ich verwende nicht PDO, weil dies ein Offline-Projekt nicht online ist.

+0

'H' in einer Datumsmaske ist 12-Stunden-Uhr; 'H' ist 24-Stunden-Uhr –

+0

ah ley mir es versuchen – lalthung

+0

" und ja, das ist nicht pdo, weil es ein Offline-Projekt nicht online ist "Ihre Annahme, dass PDO nicht mit localhost verbinden kann fehlgeleitet ist, mache ich es alle Zeit. – HPierce

Antwort

1

Da MySQL die Übergabe eines meridiem (AM oder PM) nicht unterstützt, müssen Sie die Daten ordnungsgemäß im 24-Stunden-Format übergeben. Um es richtig zu speichern, zum Beispiel 1pm, anstatt 1am, müssten Sie 13:00:00 speichern.

Verwendung:

$dt = date("Y-m-d H:i:s"); 

(Capitol H) für 24-Stunden-Format.

Siehe Beispiel 4 der date() Dokumentation für PHP, wo es das MySQL-Format erwähnt:

<?php 
// Assuming today is March 10th, 2001, 5:16:18 pm, and that we are in the 
// Mountain Standard Time (MST) Time Zone 

$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm 
$today = date("m.d.y"); // 03.10.01 
$today = date("j, n, Y"); // 10, 3, 2001 
$today = date("Ymd"); // 20010310 
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01 
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day. 
$today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001 
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month 
$today = date("H:i:s"); // 17:16:18 
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (the MySQL DATETIME format) 
?> 
+0

danke Kumpel es versuchen – lalthung

+0

Kumpel ich habe ein Bild geschrieben, bitte schauen Sie die Untersumme aller Stunden scheint nicht gut zu berechnen – lalthung

+0

@lahrtung Dies wird nicht reparieren alt Daten, die bereits eingegeben wurden. Sie müssen sie manuell in der Datenbank bearbeiten, indem Sie 12 zu den Nachmittagszeiten hinzufügen. 1pm => 13, 2pm => 14, etc ... Meine Lösung wird die Dinge voranbringen – FrankerZ

Verwandte Themen