ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingถามเรื่องการเขียน PHP ให้แสดงเวลาหน่อยครับ
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: ถามเรื่องการเขียน PHP ให้แสดงเวลาหน่อยครับ  (อ่าน 1064 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
BosnoS
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 222
ออฟไลน์ ออฟไลน์

กระทู้: 8,168



ดูรายละเอียด
« เมื่อ: 30 มิถุนายน 2009, 11:37:15 »

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

ปกติ ผมจะเก็บเวลา แบบนี้ไว้ใน SQL

ซึ่งเวลาแสดงเวลา มันก็แสดง ตามปกติ วัน เดือน ปี

แต่ผมเห็นบางเว็บ จะแสดงว่า

1 hour ago
1 day ago


อะไรประมาณนี้นะคัรบ

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

รบกวนหน่อยคัรบ
บันทึกการเข้า
g-ji
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 231
ออฟไลน์ ออฟไลน์

กระทู้: 3,254



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 30 มิถุนายน 2009, 11:53:35 »

เต้มาถามเลย สงสัยเหมือนกัน ไปหาๆ มาได้อันนี้

This is an easily extendable and pretty way to output human-readable date differences such as "1 day 2 hours ago", "6 months ago", "3 years 7 months 14 days 1 hour 4 minutes 16 seconds" etc etc.


Change "$levels = 2;" to whatever you want. A value of 1 will limit to only one number in the result ("3 days ago"). A value of 3 would result in up to three ("3 days 1 hour 2 minutes ago")

โค๊ด:
<?php 
function compare_dates($date1$date2 time()) 
    { 
    
$blocks = array( 
        array(
'name'=>'year','amount'    =>    60*60*24*365    ), 
        array(
'name'=>'month','amount'    =>    60*60*24*31    ), 
        array(
'name'=>'week','amount'    =>    60*60*24*7    ), 
        array(
'name'=>'day','amount'    =>    60*60*24    ), 
        array(
'name'=>'hour','amount'    =>    60*60        ), 
        array(
'name'=>'minute','amount'    =>    60        ), 
        array(
'name'=>'second','amount'    =>    1        
        ); 
    
    
$diff abs($date1-$date2); 
    
    
$levels 2
    
$current_level 1
    
$result = array(); 
    foreach(
$blocks as $block
        { 
        if (
$current_level $levels) {break;} 
        if (
$diff/$block['amount'] >= 1
            { 
            
$amount floor($diff/$block['amount']); 
            if (
$amount>1) {$plural='s';} else {$plural='';} 
            
$result[] = $amount.' '.$block['name'].$plural
            
$diff -= $amount*$block['amount']; 
            } 
        } 
    return 
implode(' ',$result).' ago'
    } 
?>


วิธีใช้ก็ สั่ง echo ฟังก์ชัน + ตัวแปร ข้างล่างนี้ (เลือกมาตัวนึง

It can be used in the following ways:
echo compare_dates($start_date,$end_date);
echo compare_dates($end_date,$start_date);
echo compare_dates($start_date); //end date will be assumed as time();

มีอีกหลายอัน
โค๊ด:
http://php.mirror.facebook.net/manual/en/ref.datetime.php

เอามาลองโมใช้เองดีก่า Cheesy
บันทึกการเข้า

BosnoS
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 222
ออฟไลน์ ออฟไลน์

กระทู้: 8,168



ดูรายละเอียด
« ตอบ #2 เมื่อ: 30 มิถุนายน 2009, 11:55:01 »

เต้มาถามเลย สงสัยเหมือนกัน ไปหาๆ มาได้อันนี้

This is an easily extendable and pretty way to output human-readable date differences such as "1 day 2 hours ago", "6 months ago", "3 years 7 months 14 days 1 hour 4 minutes 16 seconds" etc etc.


Change "$levels = 2;" to whatever you want. A value of 1 will limit to only one number in the result ("3 days ago"). A value of 3 would result in up to three ("3 days 1 hour 2 minutes ago")

โค๊ด:
<?php 
function compare_dates($date1$date2 time()) 
    { 
    
$blocks = array( 
        array(
'name'=>'year','amount'    =>    60*60*24*365    ), 
        array(
'name'=>'month','amount'    =>    60*60*24*31    ), 
        array(
'name'=>'week','amount'    =>    60*60*24*7    ), 
        array(
'name'=>'day','amount'    =>    60*60*24    ), 
        array(
'name'=>'hour','amount'    =>    60*60        ), 
        array(
'name'=>'minute','amount'    =>    60        ), 
        array(
'name'=>'second','amount'    =>    1        
        ); 
    
    
$diff abs($date1-$date2); 
    
    
$levels 2
    
$current_level 1
    
$result = array(); 
    foreach(
$blocks as $block
        { 
        if (
$current_level $levels) {break;} 
        if (
$diff/$block['amount'] >= 1
            { 
            
$amount floor($diff/$block['amount']); 
            if (
$amount>1) {$plural='s';} else {$plural='';} 
            
$result[] = $amount.' '.$block['name'].$plural
            
$diff -= $amount*$block['amount']; 
            } 
        } 
    return 
implode(' ',$result).' ago'
    } 
?>


วิธีใช้ก็ สั่ง echo ฟังก์ชัน + ตัวแปร ข้างล่างนี้ (เลือกมาตัวนึง

It can be used in the following ways:
echo compare_dates($start_date,$end_date);
echo compare_dates($end_date,$start_date);
echo compare_dates($start_date); //end date will be assumed as time();

มีอีกหลายอัน
โค๊ด:
http://php.mirror.facebook.net/manual/en/ref.datetime.php

เอามาลองโมใช้เองดีก่า Cheesy



โม เสร็จ บอกด้วยนะจี้
บันทึกการเข้า
g-ji
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 231
ออฟไลน์ ออฟไลน์

กระทู้: 3,254



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 30 มิถุนายน 2009, 11:57:28 »

 :-\ อ่านะ

ช่วยๆ กันโมสิ อิอิ
บันทึกการเข้า

BosnoS
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 222
ออฟไลน์ ออฟไลน์

กระทู้: 8,168



ดูรายละเอียด
« ตอบ #4 เมื่อ: 30 มิถุนายน 2009, 12:20:42 »

เหอๆ เต้ โม เป็นซะที่ไหน ตอนนี้กำลัง มั่วสุดๆล่ะ

แต่จริงๆ แล้ว ส่วนที่ post มันคือจุดเล็กๆ ที่อยากได้นะ อาจจะข้ามไปก่อน ทำส่วนใหญ่ๆ ก่อน
บันทึกการเข้า
หน้า: [1]   ขึ้นบน
พิมพ์