พอดีวันนี้เขียนโปรแกรม ๆหนึ่ง ที่ต้องแสดง วันที่สร้าง และวันที่อัปเดต รายการ ซึ่งผมเก็บลงฐานข้อมูลในรูปแบบ 2008-01-31 12:10:21

เมื่อผมนำรายการมาแสดง มันจะเป็นแบบนี้

หัวข้อ create modify
รายงานจำนวนงานถ่วงล้อ 2008-05-13 12:00:01 2008-05-20 00:10:30
รายงานยอดเจียรจานดิสก์เบรกหลัง 2008-05-13 11:51:42

วันที่สร้าง ก็เป็นอย่างที่เห็น วันที่อัปเดต ก็เป็นอย่างที่เห็น ดูยากเนอะ ก็เลยมีความคิดแว้บขึ้นมา เปลี่ยนวันที่แก้ไข จากอย่างที่เห็น ให้เป็น

หัวข้อ create modify
รายงานจำนวนงานถ่วงล้อ 2008-05-13 12:00:01 1 วัน 10ชั่วโมง 5นาที 20 วินาที ผ่านมา
รายงานยอดเจียรจานดิสก์เบรกหลัง 2008-05-13 11:51:42

ดูง่ายกว่าเย้อะะะะ…

ว่าแล้วก็ลงมือเขียนฟังก์ชั่น ผลก็ออกมาอย่างที่เห็นด้านล่างแหล่ะครับ

/**
* Convert date
*
* @author platoosom
* @email [email protected]
* @created 2008-06-04 11:15
* @modified 2008-06-04 11:15
*
* input : array( 'begin'=>date/datetime , 'end'=>date/datetime )
* output : string
*/
if( ! function_exists( 'compare_date' ) )
{
    function compare_date( $array )
	{
 
        if( ! is_array( $array ) ){ return ;}
 
        if( ( ! array_key_exists( 'begin' , $array )) || empty( $array['begin'] )){ return ;}
 
        if( ( ! array_key_exists( 'end' , $array )) || empty( $array['end'] )){ return ;}
 
        $begin_time = strtotime( $array['begin'] );
        $end_time = strtotime( $array['end'] );
 
		$amount_time = $end_time - $begin_time ;
 
        $list = array(
                                'day'=>array( 'วัน' , '86400' ) ,
                                'hour'=>array( 'ชั่วโมง' , '3600' ) ,
                                'munite'=>array( 'นาที' , '60' ) ,
                                'second'=>array( 'วินาที' , '1' )
        );
 
        foreach( $list as $value ):
 
            $result = floor( $amount_time / $value[1] );
            if( $result > 0 ){ $return[] = $result; $return[] = $value[0]; }
 
            $amount_time = $amount_time % $value[1];
 
        endforeach;
 
        return implode( ' ' , $return ).' ผ่านมา';
 
    }
}

วิธีเรียกใช้งาน จะส่ง ปี-เดือน-วัน เข้าไปอย่างเดียว หรือว่าส่ง ปี-เดือน-วัน ชั่วโมง:นาที:วินาที เข้าไปก็ได้ครับผม

echo compare_date( array( 'begin'=>'2008-01-31 10:10:10','end'=>'2008-02-01 20:11:30' ) );
echo compare_date( array('begin'=>'2008-01-31','end'=>'2008-02-01'));
echo compare_date( array('begin'=>'2008-01-31','end'=>date( 'Y-m-d H:i:s' ) ));