|
|
|
*** แจกโค้ด php thai culture ใช้สำหรับแสดงผล datetime กับ number และแปลง number เป็นภาษาไทย *** |
|
|
|
|
|
|
|
classes\thai.php
<?php
namespace classes;
use \DateTime as DateTime;
class thai {
/*==================Datetime=====================*/
public static function date_format(DateTime $date, $format) {
$thaidate = array(
'Sun' => array('l' => 'อาทิตย์', 'D' => 'อา.'),
'Mon' => array('l' => 'จันทร์', 'D' => 'จ.'),
'Tue' => array('l' => 'อังคาร', 'D' => 'อ.'),
'Wed' => array('l' => 'พุธ', 'D' => 'พ.'),
'Thu' => array('l' => 'พฤหัสบดี', 'D' => 'พฤ.'),
'Fri' => array('l' => 'ศุกร์', 'D' => 'ศ.'),
'Sat' => array('l' => 'เสาร์', 'D' => 'ส.'),
'Jan' => array('F' => 'มกราคม', 'M' => 'ม.ค.'),
'Feb' => array('F' => 'กุมภาพันธ์', 'M' => 'ก.พ.'),
'Mar' => array('F' => 'มีนาคม', 'M' => 'มี.ค.'),
'Apr' => array('F' => 'เมษายน', 'M' => 'เม.ย.'),
'May' => array('F' => 'พฤษภาคม', 'M' => 'พ.ค.'),
'Jun' => array('F' => 'มิถุนายน', 'M' => 'มิ.ย.'),
'Jul' => array('F' => 'กรกฎาคม', 'M' => 'ก.ค.'),
'Aug' => array('F' => 'สิงหาคม', 'M' => 'ส.ค.'),
'Sep' => array('F' => 'กันยายน', 'M' => 'ก.ย.'),
'Oct' => array('F' => 'ตุลาคม', 'M' => 'ต.ค.'),
'Nov' => array('F' => 'พฤศจิกายน', 'M' => 'พ.ย.'),
'Dec' => array('F' => 'ธันวาคม', 'M' => 'ธ.ค.'));
$chrarray = str_split($format);
$keys = 'roYyFMlD';
$previous = '';
$newformat = array();
foreach ($chrarray as $chr) {
$match = strpos($keys, $chr);
if ($match !== FALSE && $previous !== '\\') {
$default = $date->format($chr);
switch ($chr) {
case 'r':
$year = strval(intval($date->format('Y')) + 543);
$thai = "{$thaidate[$date->format('D')]['D']} d {$thaidate[$date->format('M')]['M']} $year H:i:s O";
array_push($newformat, $thai);
break;
case 'o':
case 'Y':
$thai = strval(intval($default) + 543);
array_push($newformat, $thai);
break;
case 'y':
$thai = substr(strval(intval($default) + 543), -2);
array_push($newformat, $thai);
break;
default:
$thai = $thaidate[substr($default, 0, 3)][$chr];
array_push($newformat, $thai);
break;
}
$previous = $chr;
}
else {
array_push($newformat, $chr);
$previous = $chr;
}
}
return self::thainum($date->format(implode($newformat)));
}
private static function thainum($string) {
$chrarray = str_split($string);
$num = array('๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙');
$thai = array();
foreach ($chrarray as $chr) {
array_push($thai, (is_numeric($chr)) ? $num[intval($chr)] : $chr);
}
return implode($thai);
}
/*==================Number=====================*/
public static function number($number) {
if (!is_numeric($number)) {
return 'Cann\'t convert.';
}
return self::thainum($number);
}
public static function number_format($number, $decimals = 0, $dec_point = '.', $thousands_sep = ',') {
if (!is_numeric($number)) {
return 'Cann\'t convert.';
}
return self::thainum(number_format($number, $decimals, $dec_point, $thousands_sep));
}
public static function number_totext($number) {
if (!is_numeric($number)) {
return 'Cann\'t convert.';
}
$num = explode('.', strval($number));
$numtext = self::numtotext($num[0]);
$dectext = (count($num) > 1) ? self::dectotext($num[1]) : '';
return (count($num) == 1) ? $numtext : "{$numtext}จุด{$dectext}";
}
public static function number_tobaht($number) {
if (!is_numeric($number)) {
return 'Cann\'t convert.';
}
$num = explode('.', strval($number));
$numtext = self::numtotext($num[0]);
$dectext = (count($num) > 1) ? (strlen($num[1]) <= 2) ? 'บาท' . self::numtotext((strlen($num[1]) == 1) ? $num[1] . '0' : $num[1]) . 'สตางค์' : 'จุด' . self::dectotext($num[1]) . 'บาท' : '';
return (count($num) > 1) ? "{$numtext}{$dectext}" : "{$numtext}บาทถ้วน";
}
private static function numtotext($string) {
$num = self::splitstr($string, 6);
$loop = count($num);
$thai = array();
for ($i = 0; $i < $loop; $i++) {
$numthai = self::numtothai($num[$i]);
for ($m = 0; $m < $i; $m++) {
$numthai .= 'ล้าน';
}
array_push($thai, $numthai);
}
return implode(array_reverse($thai));
}
private static function numtothai($string) {
$len = strlen($string);
$chrarray = array_reverse(str_split($string));
$pos = array('', 'สิบ', 'ร้อย', 'พัน', 'หมื่น', 'แสน');
$num = array('ศูนย์', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า');
$thai = array();
for ($i = 0; $i < $len; $i++) {
if ($chrarray[$i] != '0') {
if ($chrarray[$i] == '1' && $i == 0) {
array_push($thai, ($len > 1) ? 'เอ็ด' : 'หนึ่ง' . $pos[$i]);
}
else if ($chrarray[$i] == '1' && $i == 1) {
array_push($thai, $pos[$i]);
}
else if ($chrarray[$i] == '2' && $i == 1) {
array_push($thai, 'ยี่' . $pos[$i]);
}
else {
array_push($thai, $num[intval($chrarray[$i])] . $pos[$i]);
}
}
}
return implode(array_reverse($thai));
}
private static function dectotext($string) {
$chrarray = str_split($string);
$num = array('ศูนย์', 'หนึ่ง', 'สอง', 'สาม', 'สี่', 'ห้า', 'หก', 'เจ็ด', 'แปด', 'เก้า');
$thai = array();
foreach ($chrarray as $chr) {
array_push($thai, (is_numeric($chr)) ? $num[intval($chr)] : $chr);
}
return implode($thai);
}
private static function splitstr($string, $length) {
$len = strlen($string);
$floor = floor($len / $length);
$mod = $len % $length;
$result = array();
if ($floor > 0) {
for($i = 0; $i < $floor; $i++) {
array_push($result, substr($string, 0 - $length * ($i + 1), $length));
}
}
if ($mod > 0) {
array_push($result, substr($string, 0, $mod));
}
return $result;
}
}
?>
index.php
<?php
spl_autoload_extensions('.php');
spl_autoload_register();
use classes\thai as thai;
?>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test PHP</title>
</head>
<body>
<?php
$mydate = new DateTime();
echo thai::date_format($mydate, 'r');
echo '<br />';
echo thai::date_format($mydate, 'วันlที่ d F พ.ศ. Y H:i:s');
echo '<br />';
echo thai::date_format($mydate, 'l j M Y');
echo '<br />';
echo thai::date_format($mydate, 'd/m/y');
echo '<br />';
echo thai::date_format($mydate, 'D Y-n-j');
echo '<br />';
echo thai::date_format($mydate, '\D Y-n-j'); // ใช้งาน escape character
echo '<br /><br />';
$number = 909876543121.25;
echo thai::number($number);
echo '<br />';
echo thai::number_format($number, 2);
echo '<br />';
echo thai::number_format($number, 4, ',', '.');
echo '<br />';
echo thai::number_totext($number);
echo '<br />';
echo thai::number_tobaht($number);
echo '<br />';
echo thai::number_tobaht('12345678909876543121.3456'); // เกิน float max value ให้ใช้ string
echo '<br />';
?>
</body>
</html>
รัน
Tag : PHP
|
|
|
|
|
|
Date :
2013-09-09 16:08:15 |
By :
ห้ามตอบเกินวันละ 2 กระทู้ |
View :
11855 |
Reply :
16 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่มครับ
|
|
|
|
|
Date :
2013-09-09 16:19:52 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เยี่ยมมากๆเลยครับ
|
|
|
|
|
Date :
2013-09-09 16:26:51 |
By :
mangkunzo |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เจ๋งๆ ครับผม
|
|
|
|
|
Date :
2013-09-09 18:56:03 |
By :
littlebeer |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ
|
|
|
|
|
Date :
2013-09-09 19:07:04 |
By :
อิอิ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณคร้าบ เท่มากเลยทีเดียว !!
|
|
|
|
|
Date :
2013-09-26 15:55:07 |
By :
lampangman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอดครับ
|
ประวัติการแก้ไข 2013-09-26 17:21:04 2013-09-26 17:21:34 2013-09-26 17:22:18 2013-09-26 17:22:39 2013-09-26 17:23:33 2013-09-26 17:24:00
|
|
|
|
Date :
2013-09-26 17:20:27 |
By :
verture |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีประโยชน์มากคับ
|
|
|
|
|
Date :
2013-09-26 17:22:43 |
By :
chamrut |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สวดยอดจ้า ขอบคุณมากก
|
|
|
|
|
Date :
2013-09-26 18:27:02 |
By :
thecob |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ชอบๆๆ จ้า เทคนิคใหม่ๆๆ
|
|
|
|
|
Date :
2013-09-26 18:28:09 |
By :
yingthecob |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Date :
2013-09-26 18:50:43 |
By :
vongole |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยอดเยี่ยมกระเทียมดอง ว่าแต่คุณพี่ ห้ามตอบเกินวันละ 2 กระทู้
ไม่มีเพจหรอ จะติดตาม
|
|
|
|
|
Date :
2013-09-26 22:30:42 |
By :
compiak |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณ สำหรับการแบ่งปันค่ัะ
|
|
|
|
|
Date :
2013-09-27 11:03:23 |
By :
nid_248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครับ เป็นภาษาไทยแล้วเย้ๆ
|
|
|
|
|
Date :
2015-09-11 10:20:26 |
By :
wyvernorm |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แตกแล้ว
|
|
|
|
|
Date :
2016-05-30 15:26:58 |
By :
ศิษย์วัด |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอดครับ ยอมรับนับถือมากครับ
|
|
|
|
|
Date :
2016-05-30 15:32:38 |
By :
biggoto |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|