Author Topic: PHP คำนวณหาระยะห่างระหว่างวันที่  (Read 3710 times)

0 Members and 1 Guest are viewing this topic.

Offline Siamwebsolution.com

  • Hosting Provider
  • Hero Member
  • ***
  • Posts: 1,956
  • Reputation Power: 24
  • Siamwebsolution.com barely matters.Siamwebsolution.com barely matters.
  • นายนู๋
    • สยามเว็บโซลูชั่นดอทคอม รับทำเว็บไซต์ Web Design
โค้ดโปรแกรม
<?php

####### รูปแบบของวันที่ ที่อาจจะเก็บลงในฐานข้อมูลแบบนี้ ######
$start_date="17/03/2007"; // วันที่เริ่มใช้บริการ
$expire_date="17/03/2008";//วันสิ้นสุดการใช้บริการ
$today_date=date("d/m/Y ");//วันที่ของวันนี้

## ฟังก์ชั่น explode ใช้แยกเครื่องหมาย ( / ) ออกจากข้อความ แล้วเอาข้อความที่ได้ไปแยกเก็บลงใน array ##
/* วันที่เริ่มใช้บริการ */
$start_explode = explode("/", $start_date);
$start_day = $start_explode[0];
$start_month = $start_explode[1];
$start_year = $start_explode[2];

/*วันสิ้นสุดการใช้บริการ*/
$expire_explode = explode("/", $expire_date);
$expire_day = $expire_explode[0];
$expire_month = $expire_explode[1];
$expire_year = $expire_explode[2];

/*วันที่ของวันนี้*/
$today_explode = explode("/", $today_date);
$today_day = $today_explode[0];
$today_month = $today_explode[1];
$today_year = $today_explode[2];


/* ฟังก์ชั่น gregoriantojd เป็นฟังก์ชั่นที่เอาไว้แปลงวันที่ เพื่อใช้คำนวณหาจำนวนวัน
รูปแบบการใช้งาน gregoriantojd ( int $month, int $day, int $year )
โฮสที่ใช้ต้องทำการเปิด extension calendar ของ php ด้วย ถึงจะใช้งานได้*/

$start = gregoriantojd($start_month,$start_day,$start_year);
$expire = gregoriantojd($expire_month,$expire_day,$expire_year);
$today = gregoriantojd($today_month,$today_day,$today_year);

$period_of_time  = $expire-$start; //หาระยะเวลาการใช้งาน
$date_current=$expire-$today;//หาวันที่เหลืออยู่

echo "เริ่มใช้บริการวันที่ :",$start_date,"<br>";
echo "สิ้นสุดวันใช้บริการวันที่ :",$expire_date,"<br>";
echo "ระยะเวลาการใช้งาน : ",$period_of_time ," วัน<br>" ;

echo "<b>วันนี้</b> ....วันที่ $today_date ขณะนี้จึงเหลือเวลาอีก :",$date_current," วัน จึงจะถึงวันที่ $expire_date  ซึ่งเป็นวันหมดอายุการใช้งาน<br>";

?>

ผลลัพธ์จะออกมาเช่นนี้

เริ่มใช้บริการวันที่ :17/03/2007
สิ้นสุดวันใช้บริการวันที่ :17/03/2008
ระยะเวลาการใช้งาน : 366 วัน
วันนี้ ....วันที่ 18/03/2007 ขณะนี้จึงเหลือเวลาอีก :365 วัน จึงจะถึงวันที่ 17/03/2008 ซึ่งเป็นวันหมดอายุการใช้งาน

ลองเอาไปประยุกต์ใส่เงื่อนไขกันดูครับ
เช่น เช็คค่าถ้าเหลือ 15 วัน ส่งเมลล์แจ้งเตือนอัติโนมัติให้ลูกค้ามาต่ออายุ  อะไรทำนองนี้อ่ะครับ

วิธีการนำโค้ดข้างต้นไปใช้สำหรับโฮสที่ไม่ได้ลง extension calendar ของ php
พอดีผมทำให้ลูกค้าเค้าจะเอาไปใช้ที่โฮสเค้า
พอไปลงโปรแกรมปรากฎว่าโปรแกรมรันไม่ได้ครับ
เพราะว่าโฮสที่เค้าเช่าไม่ได้ลง extension calendar ของ php
ก็เลยไป Search หาวิธีมา เจอว่า  ถ้าไม่ได้ลง ก็ไม่เป็นไร
ไม่ต้องไปบอกให้เจ้าของ Server เค้าลงให้ หรือว่าเปิดให้ใช้งาน

เพียงเอาฟังก์ชั่นด้านล่างนี้ใส่ แล้ว include ไปใช้งาน  ก็ใช้งานได้ล่ะครับ

 
<?php

function GregorianToJD ($month,$day,$year) {

   if ($month > 2) {       

   $month = $month - 3;   

   } else {       

   $month = $month + 9;       
   $year = $year - 1;   

   }   

         $c = floor($year / 100);   
         $ya = $year - (100 * $c);   
         $j = floor((146097 * $c) / 4);   
         $j += floor((1461 * $ya)/4);   
         $j += floor(((153 * $month) + 2) / 5);   
         $j += $day + 1721119;   
         return $j; 
   
   }
?>


ลองดูครับ  ^_^

 lol โอเคล่ะครับ เมื่อกี้กดไวไปนิด 
ไปล่ะ... ไปเที่ยวตลาดคลองถมดีก่า วันนี้มีตอนกลางคืน

ลิงค์ที่เกี่ยวข้อง
http://th2.php.net/calendar
http://th2.php.net/GregorianToJD
http://ez.no/community/contribs/datatypes/birthday_datatype
« Last Edit: March 18, 2007, 12:42:09 AM by siamwebsolution.com »
รับทำเว็บไซต์ รับทำ SEO สอนทำเว็บ ชาญแมนชั่น เลือดหมูคุณศรี สิวาลัย ซิตี้ เพลส น้ำมันมะพร้าว สารดูดความชื้น
บริษัท สยามเว็บโซลูชั่นดอทคอม จำกัด พัทยาเหนือ ติดร้านเลือดหมูคุณศรี2 เปิดทุกวัน 08.00-16.30 น.
Office :11/22 ม.6 ต.นาเกลือ อ.บางละมุง จ.ชลบุรี 20150 Tel/Fax:038-412701,M:081-7789517,089-9879993
อีเมล์ info[at]siamwebsolution.com


Offline ICOM

  • THT Person of the Year 2008
  • Moderator
  • Hero Member
  • *****
  • Posts: 5,536
  • Reputation Power: 76
  • ICOM has a powerful will.ICOM has a powerful will.ICOM has a powerful will.ICOM has a powerful will.ICOM has a powerful will.ICOM has a powerful will.ICOM has a powerful will.
  • ใส่บวกในใจ
ขอบคุณครับ เก็บไว้เขียนโปรแกรมได้เลยครับ

Offline KKE

  • KKEonline²
  • Moderator
  • Hero Member
  • *****
  • Posts: 7,649
  • Reputation Power: 101
  • KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.KKE has an aura about them.
  • ;-)
    • PinkkeyHost.com - Professional Web Hosting & Domain Name Services
ขอบคุณครับ เป็น code ที่เป็นขั้นตอนอ่านเข้าใจง่ายดีมากครับ
แต่ใช้งานจริง ตรง explode ลองรวบยอดแบบนี้ดูครับ

list($start_day,$start_month,$start_year) = explode("/", $start_date);
list($expire_day,$expire_month,$expire_year) = explode("/", $expire_date);
list($today_day,$toady_month,$today_year) = explode("/", $today_date);

จาก 12 บรรทัดจะเหลือ 3 บรรทัด

Offline binarywebhost

  • Hosting Provider
  • Full Member
  • ***
  • Posts: 363
  • Reputation Power: 4
  • binarywebhost has no influence.
  • Binarywebhost.com อายุ 2 ขวบ [16-10-08]
    • 10101010 BinaryWebHost.COM
ขออนุญาตเก็บไว้ใช้นะครับ  lol lol lol
http://www.binarywebhost.com
การเรียนรู้จากความผิดพลาดของผู้อื่น แล้วนำมาปรับปรุงไม่ให้เกิดความผิดพลาดกับตนเอง ควรเรียกบุคคนนั้นว่าผู้ฉลาด
การเรียนรู้จากความสำเร็จของผู้อื่น แล้วนำมาปรับเปลี่ยนให้เป็นความสำเร็จของตนเอง ควรเรียกบุคคนนั้นว่าผู้ปราดเปรื่อง

Opteron

  • Guest
แล้วเดือนกุมภาจะรู้ได้ไงว่ามันมี 28 หรือว่า 29 วันอ่ะครับ

Offline binarywebhost

  • Hosting Provider
  • Full Member
  • ***
  • Posts: 363
  • Reputation Power: 4
  • binarywebhost has no influence.
  • Binarywebhost.com อายุ 2 ขวบ [16-10-08]
    • 10101010 BinaryWebHost.COM
มันคำนาณอยู่ตรงนี้ครับ (น่าจะใช่  lol)

Quote
         $ya = $year - (100 * $c);   
         $j = floor((146097 * $c) / 4);   
         $j += floor((1461 * $ya)/4);

http://www.binarywebhost.com
การเรียนรู้จากความผิดพลาดของผู้อื่น แล้วนำมาปรับปรุงไม่ให้เกิดความผิดพลาดกับตนเอง ควรเรียกบุคคนนั้นว่าผู้ฉลาด
การเรียนรู้จากความสำเร็จของผู้อื่น แล้วนำมาปรับเปลี่ยนให้เป็นความสำเร็จของตนเอง ควรเรียกบุคคนนั้นว่าผู้ปราดเปรื่อง