|
|
|
แจกฟังก์ชั่นแสดงเวลา แบบ Facebook แสดงผลทั้ง ไทยและอังกฤษ |
|
|
|
|
|
|
|
แจกฟังก์ชั่นแสดงผลเวลาเป็นแบบข้อความ เหมือนใน Facebook คับ
หากไม่เข้าใจดูรูปได้ล่างได้เลยคับ
คุณสมบัติ
- สามารถแสดงเวลาแบบข้อความ (เหมือน Facebook)
- สามารถแสดงเวลาเป็นแบบธรรมดา (25 มิ.ย. 2011 19:47)
- สามารถแสดงผลเป็นภาษาไทยได้
หลักการทำงาน
1. หากเราเลือกแสดงเวลาเป็นข้อความ จะแสดงเวลาเป็น
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 นาที จะแสดงผลว่า ผ่านมาแล้ว กี่วินาที เช่น 4 seconds ago หรือ 4 วินาทีที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 ชั่วโมง จะแสดงผลว่า ผ่านมาแล้ว กี่นาที เช่น 41 minutes ago หรือ 41 นาทีที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 วัน จะแสดงผลว่า ผ่านมาแล้ว กี่ชั่วโมง เช่น 4 hoursago หรือ 41 ชั่วโมงที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 1 วัน จะแสดงผลว่า เมื่อวานนี้
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 2 วัน จะแสดงผลเป็นชื่อของวันที่โพสต์ เช่น วันอังคาร เวลา 14:21
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 4 วัน จะแสดงผลเป็นเวลาธรรมดา เช่น 11 June 21:36
2. หากเราเลือกแสดงเวลาเป็นเวลาธรรมดาจะแสดงผลเป็นเวลาปกติตามที่เรากำหนดไว้ โดยฟังก์ชั่นจะแปลงเวลาเป็นภาษาไทยให้อัตโนมัติ หากเราเลือกที่จะแสดงผลเป็นภาษาไทย
โค้คที่จำเป็น
โค้ตจะแบ่งเป็น 2 ส่วนนะคับ
1. คือส่วนตัวแปร ซึ่งจะเก็บข้อความที่จะใช้แสดงทั้งภาษาไทยและภาษาอังกฤษ สามารถแก้ไขได้สะดวก
2. คือส่วนฟังก์ชั่น ส่วนนี้จะเป็นส่วนที่คำนวนเวลาที่จะแสดงผล
Code (PHP) ส่วนตัวแปร
/* =Time&Date Config
-------------------------------------------------------------- */
$SuffixTime = array(
"th"=>array(
"time"=>array(
"Seconds" => " วินาทีที่แล้ว",
"Minutes" => " นาทีที่แล้ว",
"Hours" => " ชั่วโมงที่แล้ว"
),
"day"=>array(
"Yesterday" => "เมื่อวาน เวลา ",
"Monday" => "วันจันทร์ เวลา ",
"Tuesday" => "วันอังคาร เวลา ",
"Wednesday" => "วันพุธ เวลา ",
"Thursday" => "วันพฤหัสบดี เวลา ",
"Friday" => "วันศุกร์ เวลา ",
"Saturday" => " วันวันเสาร์ เวลา ",
"Sunday" => "วันอาทิตย์ เวลา ",
)
),
"en"=>array(
"time"=>array(
"Seconds" => " seconds ago",
"Minutes" => " minutes ago",
"Hours" => " hours ago"
),
"day"=>array(
"Yesterday" => "Yesterday at ",
"Monday" => "Monday at ",
"Tuesday" => "Tuesday at ",
"Wednesday" => "Wednesday at ",
"Thursday" => "Thursday at ",
"Friday" => "Friday at ",
"Saturday" => "Saturday at ",
"Sunday" => "Sunday at ",
)
)
);
$DateThai = array(
// Day
"l" => array( // Full day
"Monday" => "วันจันทร์",
"Tuesday" => "วันอังคาร",
"Wednesday" => "วันพุธ",
"Thursday" => "วันพฤหัสบดี",
"Friday" => "วันศุกร์",
"Saturday" => "วันวันเสาร์",
"Sunday" => "วันอาทิตย์",
),
"D" => array( // Abbreviated day
"Monday" => "จันทร์",
"Tuesday" => "อังคาร",
"Wednesday" => "พุธ",
"Thursday" => "พฤหัส",
"Friday" => "ศุกร์",
"Saturday" => "วันเสาร์",
"Sunday" => "อาทิตย์",
),
// Month
"F" => array( // Full month
"January" => "มกราคม",
"February" => "กุมภาพันธ์",
"March" => "มีนาคม",
"April" => "เมษายน",
"May" => "พฤษภาคม",
"June" => "มิถุนายน",
"July" => "กรกฎาคม",
"August" => "สิงหาคม",
"September" => "กันยายน",
"October" => "ตุลาคม",
"November" => "พฤศจิกายน",
"December" => "ธันวาคม"
),
"M" => array( // Abbreviated month
"January" => "ม.ค.",
"February" => "ก.พ.",
"March" => "มี.ค.",
"April" => "เม.ย.",
"May" => "พ.ค.",
"June" => "มิ.ย.",
"July" => "ก.ค.",
"August" => "ส.ค.",
"September" => "ก.ย.",
"October" => "ต.ค.",
"November" => "พ.ย.",
"December" => "ธ.ค."
)
);
/* =Time&Date Config
-------------------------------------------------------------- */
Code (PHP) ส่วนฟังก์ชั่น
/* =Function
-------------------------------------------------------------- */
function generate_date_today($Format, $Timestamp, $Language = "en", $TimeText = true )
{
global $SuffixTime, $DateThai;
//return date("i:H d-m-Y", $Timestamp) ." | ". date("i:H d-m-Y", time());
if( date("Ymd", $Timestamp) >= date("Ymd", (time()-345600)) && $TimeText) // Less than 3 days.
{
$TimeStampAgo = (time()-$Timestamp);
if(($TimeStampAgo < 86400)) // Less than 1 day.
{
$TimeDay = "time"; // Use array time
if($TimeStampAgo < 60) // Less than 1 minute.
{
$Return = (time() - $Timestamp);
$Values = "Seconds";
}
else if($TimeStampAgo < 3600) // Less than 1 hour.
{
$Return = floor( (time() - $Timestamp)/60 );
$Values = "Minutes";
}
else // Less than 1 day.
{
$Return = floor( (time() - $Timestamp)/3600 );
$Values = "Hours";
}
}
else if($TimeStampAgo < 172800) // Less than 2 day.
{
$Return = date("H:i", $Timestamp);
$TimeDay = "day";
$Values = "Yesterday";
}
else // More than 2 hours..
{
$Return = date("H:i", $Timestamp);
$TimeDay = "day";
$Values = date("l", $Timestamp);
}
if($TimeDay == "time")
$Return .= $SuffixTime[$Language][$TimeDay][$Values];
else if($TimeDay == "day")
$Return = $SuffixTime[$Language][$TimeDay][$Values] . $Return;
return $Return;
}
else
{
if($Language == "en")
{
return date($Format, $Timestamp);
}
else if($Language == "th")
{
$Format = str_replace("l", "|1|", $Format);
$Format = str_replace("D", "|2|", $Format);
$Format = str_replace("F", "|3|", $Format);
$Format = str_replace("M", "|4|", $Format);
$Format = str_replace("y", "|x|", $Format);
$Format = str_replace("Y", "|X|", $Format);
$DateCache = date($Format, $Timestamp);
$AR1 = array ("", "l", "D", "F", "M");
$AR2 = array ("", "l", "l", "F", "F");
for($i=1; $i<=4; $i++)
{
if(strstr($DateCache, "|". $i ."|"))
{
//$Return .= $i;
$split = explode("|". $i ."|", $DateCache);
for($j=0; $j<count($split)-1; $j++)
{
$StrCache .= $split[$j];
$StrCache .= $DateThai[$AR1[$i]][date($AR2[$i], $Timestamp)];
}
$StrCache .= $split[count($split)-1];
$DateCache = $StrCache;
$StrCache = "";
empty($split);
}
}
if(strstr($DateCache, "|x|"))
{
$split = explode("|x|", $DateCache);
for($i=0; $i<count($split)-1; $i++)
{
$StrCache .= $split[$i];
$StrCache .= substr((date("Y", $Timestamp)+543), -2);
}
$StrCache .= $split[count($split)-1];
$DateCache = $StrCache;
$StrCache = "";
empty($split);
}
if(strstr($DateCache, "|X|"))
{
$split = explode("|X|", $DateCache);
for($i=0; $i<count($split)-1; $i++)
{
$StrCache .= $split[$i];
$StrCache .= (date("Y", $Timestamp)+543);
}
$StrCache .= $split[count($split)-1];
$DateCache = $StrCache;
$StrCache = "";
empty($split);
}
$Return = $DateCache;
return $Return;
}
}
}
/* =Function
-------------------------------------------------------------- */
การใช้งาน
เรียกใช้ฟังก์ชั่น generate_date_today($Format, $Timestamp, $Language, $TimeText )
อธิบายความหมาย
$Format = รูปแบบเวลาที่จะแสดงในแบบเวลาธรรมดา เช่น "d M Y H:i"
$Timestamp = เวลาที่จะคำนวน ต้องเป็นเวลาแบบ timestamp เช่น 1309006064
$Language = ภาษาที่จะแสดง แสดงภาษาไทยใส่ "th", แสดงภาษาอังกฤษ "en" (ค่าแรกเริ่มเป็นภาษาอังกฤษ "en")
$TimeText = ต้องการแสดงเวลาเป็นแบบข้อความหรือแบบปกติทั่วไป หากต้องการแสดงให้ใส่ค่า "true" หากไม่ต้องการให้ใส่ค่า "false" (ค่าเริ่มต้นคือแสดง true)
ตัวอย่างการแสดงข้อความ
Code (PHP)
echo "แสดงผลเป็นข้อความ";
echo "<br />";
echo "English : ". generate_date_today("d M Y H:i", (time()-14400), "en", true);
echo "<br />";
echo "English : ". generate_date_today("d M Y H:i", (time()-14400));
echo "<br />";
echo "ภาษาไทย : ". generate_date_today("d M Y H:i", (time()-14400), "th", true);
echo "<br />";
echo "ภาษาไทย : ". generate_date_today("d M Y H:i", (time()-14400), "th");
echo "<br />";
echo "<br />";
echo "<br />";
echo "แสดงผลเป็นเวลาธรรมดา";
echo "<br />";
echo "English : ". generate_date_today("d M Y H:i", (time()-14400), "en", false);
echo "<br />";
echo "ภาษาไทย : ". generate_date_today("d M Y H:i", (time()-14400), "th", false);
สงสัยอะไรสอบถามได้ที่กระทู้นี้เลยนะคับ
มีขอติชม ช่วยแนะนำได้เลยนะคับ
//--------------- แก้ไข ----------------------//
ผมทำการแก้ไขฟังก์ชั่นใหม่นิดหน่อยนะคับ
ตรงส่วนที่สั่งให้แสดงผลเป็นภาษาไทย
ผมแสดงชื่อวันกับเดือนเป็นภาษาไทย แต่ปี ยังเป็น ค.ศ. อยู่
ตอนนี้ผมแก้ไข้ให้เป็น พ.ศ. แล้วนะคับ ในโหมดแสดงเป็นภาษาไทย
Tag : PHP
|
ประวัติการแก้ไข 2011-06-25 21:07:40 2011-06-26 15:40:47
|
|
|
|
|
Date :
2011-06-25 21:05:29 |
By :
petzaza009 |
View :
32474 |
Reply :
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ดีครับ ทำแล้วมาแบ่งปัน
ใช้ง่ายดีอ่านแล้วเข้าใจ
|
|
|
|
|
Date :
2011-06-25 21:13:14 |
By :
oxygenyoyo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เยี่ยมครับ ท่านนี้ใจดีชอบมีของมาแจกครับ
|
|
|
|
|
Date :
2011-06-25 21:59:59 |
By :
webmaster |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณสำหรับสิ่งดีๆ ครับ ขอรับไปเลยละกัน อิอิ
|
|
|
|
|
Date :
2011-06-25 22:04:16 |
By :
ppanchai |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
งั้นขอถามให้หายสงสัยหน่อยนะครับ
ค่าของ timestamp ที่จะเอาไปลบ ตรง time()-14400 นี่ได้จาก
timestamp ปัจจุบัน - timestamp ตอนโพสข้อความ = timestamp ที่ต้องการไปคำนวณ
ผมเข้าใจถูกไหมครับ
ตย.
$res = time() - timestamp ตอนโพสข้อความ;
echo "English : ". generate_date_today("d M Y H:i", (time()-$res), "en", true);
แบบนี้ถูกไหมครับ ผมลองแล้วก็โอนะ
|
ประวัติการแก้ไข 2011-06-25 22:50:08 2011-06-25 22:54:46
|
|
|
|
Date :
2011-06-25 22:49:21 |
By :
ppanchai |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เข้าใจง่ายมากครับ ขอบคุณสำหรับ Code ครับ
|
|
|
|
|
Date :
2011-10-08 00:10:27 |
By :
skmbz |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เม้นไว้ค่ะเดี่ยวมาอ่านต่อ
ขอบคุณมากมายค่ะ
|
|
|
|
|
Date :
2011-12-07 01:04:01 |
By :
iibuu |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ
|
|
|
|
|
Date :
2012-01-09 15:28:59 |
By :
rutrmutt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอดเลยค่ะพี่
|
|
|
|
|
Date :
2012-01-13 23:01:53 |
By :
saatemis |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณทุกคอมเม้นท์นะคับ
วันนี้ได้โอกาสที่เอาฟังก์ชั่นนี้ไปใช้ เลยนึกถึงโพสต์ที่ตัวเองมาแบ่งปัน
ปล. ตอนจะใช้เสือกไม่มั่นใจโค้ดตัวเองว่าแสดงผลถูกไม ฮ่าๆ
ปล 2. ช่วงนี้ไม่ค่อยมีฟังก์ชั่นหรือสคริปใหม่ๆ มาแจกเลย ใครอยากได้ฟังก์ชั่นแบบใหน แนะนำได้นะคับ เผื่อผมทำได้จะได้มาแชร์กัน
|
|
|
|
|
Date :
2012-01-22 12:32:12 |
By :
petzaza009 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอสอบถามหน่อยค่ะ เวลาtimestamp ที่ได้จาก facebook เมื่อแปลงเป็นวัน เวลาปกติแล้ว ข้อมูลวัน เวลา จะไม่เหมือนกับเวลาคอมเม้นบนหน้า wall ค่ะ ขอบคุณมากค่ะ
|
|
|
|
|
Date :
2012-10-05 10:49:17 |
By :
เปิ้ล |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าผม เก็บค่าเป็น
$ad='2012-10-17 17:30:05';
จะต้องแปลงค่า ก่อนเอา time() มา - $ad ยังไงเหรอครับ
|
ประวัติการแก้ไข 2012-10-18 18:02:12 2012-10-18 18:51:54 2012-10-18 19:01:49
|
|
|
|
Date :
2012-10-18 18:00:38 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เก็บครับ สุดยอดมาก เขียนมาเป็นฟังก์ชันด้วยเอาไปต่อยอดได้ง่ายมาก
|
ประวัติการแก้ไข 2012-10-20 15:41:44
|
|
|
|
Date :
2012-10-20 15:41:04 |
By :
nopzsoodsoi |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากได้แบบ css class + javascript อัพเดทเวลาเองไม่ต้องดึงจากฐานข้อมูล อิอิ จะดึงแค่ครั้งแรกอะครับ
ขอแค่แนวทางก็ได้
|
|
|
|
|
Date :
2012-10-23 11:37:19 |
By :
dekkuza |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ได้ความรู้มากเลย ขอบคุณค่ะ
|
|
|
|
|
Date :
2013-03-27 13:56:58 |
By :
bsaranya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
บ่องตง ฝุดยอด
|
|
|
|
|
Date :
2013-03-27 15:04:10 |
By :
Necrotorture |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ถ้าผม เก็บค่าเป็น
$CreateDate='2014-08-10 10:30:05';
จะต้องแปลงค่า ก่อนเอา time() มา - $CreateDate ยังไงเหรอครับ
รบกวนผู้รู้ที
|
ประวัติการแก้ไข 2014-08-14 10:53:38 2014-08-14 10:58:13
|
|
|
|
Date :
2014-08-14 10:52:46 |
By :
Zakariya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำตามแล้ว ไม่ได้ครับ
ได้โค้ดแบบนี้แทนครับ
Code (PHP)
function time_ago($date,$granularity=2) {
$date = strtotime($date);
$difference = time() - $date;
$periods = array('decade' => 315360000,
'ปี' => 31536000,
'เดือน' => 2628000,
'สัปดาห์' => 604800,
'วัน' => 86400,
'ชั่วโมง' => 3600,
'นาที' => 60,
'วินาที' => 1);
foreach ($periods as $key => $value) {
if ($difference >= $value) {
$time = floor($difference/$value);
$difference %= $value;
if(($time-1) > 0){
$retval .= ($retval ? ' ' : '').$time.' ';
$retval .= $key;
}
$granularity--;
}
if ($granularity == '0') { break; }
}
return ' เมื่อ '.$retval.'ที่แล้ว';
}
$date = "2014-09-22 10:40:03";
echo time_ago($date);
ขอบคุณ http://www.mdj.us/web-development/php-programming/another-variation-on-the-time-ago-php-function-use-mysqls-datetime-field-type/
|
|
|
|
|
Date :
2014-09-22 10:45:34 |
By :
clubp_mark |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$dateAB = $row[m_date];
echo " ". generate_date_today("d M Y H:i", (time()-$dateAB ), "th", true);
ผมทำแบบนี้ถูกไหมครับ แต่ผลลัพธ์ไม่ตรงแบบ นี้เลย
1. หากเราเลือกแสดงเวลาเป็นข้อความ จะแสดงเวลาเป็น
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 นาที จะแสดงผลว่า ผ่านมาแล้ว กี่วินาที เช่น 4 seconds ago หรือ 4 วินาทีที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 ชั่วโมง จะแสดงผลว่า ผ่านมาแล้ว กี่นาที เช่น 41 minutes ago หรือ 41 นาทีที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันน้อยกว่า 1 วัน จะแสดงผลว่า ผ่านมาแล้ว กี่ชั่วโมง เช่น 4 hoursago หรือ 41 ชั่วโมงที่แล้ว
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 1 วัน จะแสดงผลว่า เมื่อวานนี้
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 2 วัน จะแสดงผลเป็นชื่อของวันที่โพสต์ เช่น วันอังคาร เวลา 14:21
- หากเวลาที่จะแสดงต่างจากเวลาปัจจุบันมากกว่า 4 วัน จะแสดงผลเป็นเวลาธรรมดา เช่น 11 June 21:36
2. หากเราเลือกแสดงเวลาเป็นเวลาธรรมดาจะแสดงผลเป็นเวลาปกติตามที่เรากำหนดไว้ โดยฟังก์ชั่นจะแปลงเวลาเป็นภาษาไทยให้อัตโนมัติ หากเราเลือกที่จะแสดงผลเป็นภาษาไทย
|
|
|
|
|
Date :
2016-05-25 10:01:38 |
By :
yuttakarn |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ช่วยสวนหน่อยครับใครทำเป็นบ้างผมพยายสมทั้งคืนก็ไม่ได้
ส่งไฟล์ ตย. ให้หรือสอนก็ได้ครับ
[email protected]
|
|
|
|
|
Date :
2016-12-06 05:28:00 |
By :
85clip |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ทำไม่เป็นอะค่ะ ไม่ได้เรียนคอมมา หากไม่ดูเป็นการลบกวน ส่งวิธีทำแบบเป็นภาพว่าต้องเข้าตรงไหน อ่ะค่ะ หาไม่เจอ ขอบพระคุณค่ะ อยากได้มากค่ะ
|
|
|
|
|
Date :
2018-08-21 11:17:54 |
By :
กฤษณี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|