|
|
|
รบกวนช่วยเรื่อง mktime ทีครับ มีตัวอย่างโค้ดด้านใน แบบว่าจะนำไปประยุกต์ใช้อ่ะครับ |
|
|
|
|
|
|
|
Code (PHP)
<?php
$rdate = mktime(8,0,0,3,31,2011);
$ftart = mktime(17,0,0,3,30,2011);
$online=$rdate-$ftart;
$day = intval( $online / 86400 ); // จำนวนวัน
$hours = intval( ( $online % 86400 ) / 3600 ); // จำนวน ชั่วโมง
$mins = intval( ( ( $online % 86400 ) % 3600 ) / 60 ); // จำนวน นาที
$secs = intval( ( ( ( $online % 86400 ) % 3600) % 60 ) ); // จำนวน วินาที
print "$day วัน $hours ชั่วโมง $mins นาที $secs วินาที ";
?>
คือผมไม่รู้ว่าจะส่งค่าใหกับ mktime ยังไงอ่ะครับ เหลือจุดนี้จุดเดียวที่ติดอ่ะครับ ส่วนตัวโค้ดที่เหลือพอเข้าใจอยู่บ้างครับ
ช่วยทีครับ
อ้อ วันที่และเวลา ที่นำมาคิด ได้จากการ query จากฐานข้อมูลครับ
รูปแบบ Y-m-d h-i-s ครับ
ตัวอย่างจาก https://www.thaicreate.com/php/forum/058080.html
Tag : PHP, MySQL, JavaScript
|
ประวัติการแก้ไข 2012-02-29 11:01:00
|
|
|
|
|
Date :
2012-02-29 10:59:57 |
By :
akkaneetha |
View :
3367 |
Reply :
10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จะใช้อะไรจากฟังก์ชั่นนี้ครับ
|
|
|
|
|
Date :
2012-02-29 11:35:25 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สิ่งที่ต้องการคือ ผลต่างของเวลาเป็น ชั่วโมงและนาที เท่านั้นครับ
|
|
|
|
|
Date :
2012-02-29 11:39:15 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ก็ echo ออกมาได้แล้วแหละครับ แต่ค่าพวกนั้นเป็นค่าที่เซ็ตไว้
Code (PHP)
$rdate = mktime(8,0,0,3,31,2011);
$ftart = mktime(17,0,0,3,30,2011);
แต่ที่ผมไม่รู้คือ ถ้าดึงข้อมูลขึ้นมาจากฐานข้อมูล จะนำค่า วันที่และเวลา ใส่หรือส่งให้ตัวแปร $rdate กับ $ftart ยังไงอ่ะครับ
ยังทำไม่ได้เลย ถ้าส่งค่าไปตัวแปร สองตัวนี้ได้ก็จบแล้วละครับ
|
ประวัติการแก้ไข 2012-02-29 13:50:57
|
|
|
|
Date :
2012-02-29 13:50:19 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช้อันนี้ครับ
Code (PHP)
<?php
function DateDiff($strDate1,$strDate2)
{
return (strtotime($strDate2) - strtotime($strDate1))/ ( 60 * 60 * 24 ); // 1 day = 60*60*24
}
function TimeDiff($strTime1,$strTime2)
{
return (strtotime($strTime2) - strtotime($strTime1))/ ( 60 * 60 ); // 1 Hour = 60*60
}
function DateTimeDiff($strDateTime1,$strDateTime2)
{
return (strtotime($strDateTime2) - strtotime($strDateTime1))/ ( 60 * 60 ); // 1 Hour = 60*60
}
echo "Date Diff = ".DateDiff("2008-08-01","2008-08-31")."<br>";
echo "Time Diff = ".TimeDiff("00:00","19:00")."<br>";
echo "Date Time Diff = ".DateTimeDiff("2008-08-01 00:00","2008-08-01 19:00")."<br>";
?>
ค่าที่อยู่ในวงเล็บให้ใส่ข้อมูลในฐานข้อมูลแทน
|
ประวัติการแก้ไข 2012-02-29 13:58:41
|
|
|
|
Date :
2012-02-29 13:57:51 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากลิงค์ที่ให้ไป มีวิธีเปลี่ยนค่าวันที่ที่เราอ่านกัน หรือจากในฐานข้อมูล เป็น mktime ด้วยครับ
|
|
|
|
|
Date :
2012-02-29 13:58:47 |
By :
Songkram |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@อ้นคุง ดค้ดนี้ผมลองนำมาใช้แล้วครับ แต่ติดตรงที่ว่า คำนวนชั่วโมงออกมา ไม่ได้เป็นนาทีอ่ะครับ อย่าง เวลารวม 9 ชั่ว 30 นาที จะแสดง เป็น 9.5 ชั่วโมง ครับ เลยลองเอาโค้ดอื่นมาปรับใช้อ่ะครับ
@NOOM ลิงค์ที่ให้มาอ่ะครับ พอกดเข้าไปมันก็บอกว่า "ขออภัย ไม่พบหน้าที่เรียก กรุณาตรวจสอบ URL ให้ถูกต้อง" ครับ
|
|
|
|
|
Date :
2012-02-29 14:21:31 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
จากตัวอย่างเขาก็มีมาให้ครบ ไม่ทราบว่าท่านก็อปมาหมดหรือเปล่าละครับ
Code (PHP)
<?php
$rdate = mktime(8,0,0,3,30,2011);
$ftart = mktime(8,0,0,3,30,2011);
$online=$rdate-$ftart;
$day = intval( $online / 86400 ); // จำนวนวัน
$hours = intval( ( $online % 86400 ) / 3600 ); // จำนวน ชั่วโมง
$mins = intval( ( ( $online % 86400 ) % 3600 ) / 60 ); // จำนวน นาที
$secs = intval( ( ( ( $online % 86400 ) % 3600) % 60 ) ); // จำนวน วินาที
print "$online -- $day -- $hours-- $mins-- $secs ";
?>
<?
function dateDiv($t1,$t2){ // ส่งวันที่ที่ต้องการเปรียบเทียบ ในรูปแบบ มาตรฐาน 2006-03-27 21:39:12
$t1Arr=splitTime($t1);
$t2Arr=splitTime($t2);
$Time1=mktime($t1Arr["h"], $t1Arr["m"], $t1Arr["s"], $t1Arr["M"], $t1Arr["D"], $t1Arr["Y"]);
$Time2=mktime($t2Arr["h"], $t2Arr["m"], $t2Arr["s"], $t2Arr["M"], $t2Arr["D"], $t2Arr["Y"]);
$TimeDiv=abs($Time2-$Time1);
$Time["D"]=intval($TimeDiv/86400); // จำนวนวัน
$Time["H"]=intval(($TimeDiv%86400)/3600); // จำนวน ชั่วโมง
$Time["M"]=intval((($TimeDiv%86400)%3600)/60); // จำนวน นาที
$Time["S"]=intval(((($TimeDiv%86400)%3600)%60)); // จำนวน วินาที
return $Time;
}
function splitTime($time){ // เวลาในรูปแบบ มาตรฐาน 2006-03-27 21:39:12
$timeArr["Y"]= substr($time,2,2);
$timeArr["M"]= substr($time,5,2);
$timeArr["D"]= substr($time,8,2);
$timeArr["h"]= substr($time,11,2);
$timeArr["m"]= substr($time,14,2);
$timeArr["s"]= substr($time,17,2);
return $timeArr;
}
//------------------------------ ตัวอย่างการใช้งาน
$t1="2006-03-27 21:20:00"; /// เปลี่ยนเป็นข้อมูลจากฐานข้อมูล
$t2="2006-04-27 22:30:50"; /// เปลี่ยนเป็นข้อมูลจากฐานข้อมูล
print "<br> $t1 <br> $t2 <br> ";
$time=dateDiv($t1,$t2);
print_r($time);
?>
|
|
|
|
|
Date :
2012-02-29 14:53:41 |
By :
Dragons_first |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้แล้วครับ แก้อยู่ตั้งนาน เลยเอาโค้ดมาให้ดู เพื่อมีใครจะแนะนำ หรือว่านำไปใช้บ้าง
ของผมเป็นกรณีที่ แสดงข้อมูลเป็นตารางแล้ว Query ข้อมูลขึ้นมาแสดงครับ
ส่วนนี้เอาไว้ข้างนอกเลย(นอกตาราง นอกคำสั่ง while)
Code (PHP)
<?php
function dateDiv($start,$end){
$t1Arr=splitTime($start);
$t2Arr=splitTime($end);
$Time1=mktime($t1Arr["h"], $t1Arr["m"], $t1Arr["s"], $t1Arr["M"], $t1Arr["D"], $t1Arr["Y"]);
$Time2=mktime($t2Arr["h"], $t2Arr["m"], $t2Arr["s"], $t2Arr["M"], $t2Arr["D"], $t2Arr["Y"]);
$online=$Time2-$Time1;
$day = intval( $online / 86400 ); // จำนวนวัน
$hours = intval( ( $online % 86400 ) / 3600 ); // จำนวน ชั่วโมง
$mins = intval( ( ( $online % 86400 ) % 3600 ) / 60 ); // จำนวน นาที
$secs = intval( ( ( ( $online % 86400 ) % 3600) % 60 ) ); // จำนวน วินาที
print "$day วัน $hours ชม. $mins นาที";
}
function splitTime($time){
$timeArr["Y"]= substr($time,2,2);//ในส่วนนี้ก็มานั่งนับเอานะครับ ถ้าค่าที่ส่งเข้า ไม่ได้เกิดจากการนำข้อมูลมาต่อกันก็ใช้ค่าจากตัวอย่างจากลิงค์ที่โพสไว้นะครับ
$timeArr["M"]= substr($time,5,2);
$timeArr["D"]= substr($time,8,2);
$timeArr["h"]= substr($time,10,2);
$timeArr["m"]= substr($time,13,2);
$timeArr["s"]= substr($time,16,2);
return $timeArr;
}
?>
ส่วนในตาราง ตำแหน่งที่ต้องการแสดงผลก็ใส่โค้ดนี้ไว้
Code (PHP)
<?php
$ID = $workResult["IDwork"];
$stSQL = "SELECT CONCAT(date,time_start) As start FROM workorder where IDwork = '$ID' ";
$stQuery = mysql_query($stSQL);
$stResult = mysql_fetch_array($stQuery); // ในส่วน query พอดีค่าของผมอยู่คนละฟิลด์ เลยต้องจับมันมารวมกันก่อนอ่ะครับ ถ้าอยู่ฟิลด์เดียวก็ query ธรรมดา ก็น่าจะได้นะครับ
$enSQL = "SELECT CONCAT(date_end,time_end) As end FROM workorder where IDwork = '$ID' ";
$enQuery = mysql_query($enSQL);
$enResult = mysql_fetch_array($enQuery);
$start = $stResult["start"];
$end = $enResult["end"];
$time=dateDiv($start,$end); //ส่งค่าไปให้ ฟังก์ชั่น dateDiv แล้วฟังก์ชั่นก็จะแสดงค่าที่คิดได้ออกมาครับ
?>
โค้ดต้นฉบับครับ
https://www.thaicreate.com/php/forum/058080.html
แล้วก็ขอขอบคุณ คุณอ้นคุง กับคุณ NOOM ที่เข้ามาแนะนำนะครับ
|
ประวัติการแก้ไข 2012-02-29 15:30:01 2012-02-29 15:31:13 2012-02-29 15:32:02
|
|
|
|
Date :
2012-02-29 15:29:09 |
By :
akkaneetha |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้วววว... ขออภัยครับ มันต้องสมัครสมาชิกด้วยถึงดูได้
|
|
|
|
|
Date :
2012-02-29 15:55:00 |
By :
Songkram |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|