หมวดหมู่: Yii 2

YII2: formatterYII2: formatter

ถ้าทำระบบที่ออกแบบให้ลูกค้าจากต่างประเทศมาใช้งานได้อย่างสะดวก อาจจะต้องเปลี่ยนการแสดงผลให้ตามความเคยชินของลูกค้า อย่าง เช่น วันที่ คนไทยจะใช้ d/M/Y คือ วันที่/เดือน/ปี แต่คนอเมริกันจะใช้ M/d/Y คือ เดือนมาก่อน/วันที่/ปี แต่อัฟริการใต้และฐานข้อมูลส่วนใหญจะเก็บแบบ Y-M-d คือ ปี-เดือน-วัน จะสามารเรียงข้อมูลตามวันเวลา ได้ง่ายที่สุด แต่ไม่นิยมใช้กันในชีวิตประจำวัน ซึ่งถ้าไม่สังเกตดี ๆ อาจจะเข้าใจกันผิดได้

Yii2 ได้อำนวยความสะดวกในส่วนนี้ให้โดยเพียงแค่ไปที่ไฟล์ \common\config\main.php เพิ่ม
main.php

 'components' => [
...
 'formatter' => [
 'currencyCode' => 'THB',
 'dateFormat' => 'd/M/Y',
 'datetimeFormat' => 'd/M/Y H:i:s',
 'defaultTimeZone' => 'Asia/Bangkok',
 'locale' => 'th-TH',
 'sizeFormatBase' => 1024,
 'timeFormat' => 'H:i:s',
 ],
...

ก็จะสามารถใช้ความสามารถนี้ได้
เริ่มจากวันและเวลากันก่อน

$date = date ('c') ;
echo '<br>$date = '.$date,
'<br>',
'<br>dateFormat = '.Yii::$app->formatter->dateFormat,
'<br>asDate ($date) = '.Yii::$app->formatter->asDate ($date) ,
'<br>asDate ($date, \'Y-M-d\') = '.Yii::$app->formatter->asDate ($date, 'Y-M-d') ,
'<br>',
'<br>datetimeFormat = '.Yii::$app->formatter->datetimeFormat,
'<br>asDatetime ($date) = '.Yii::$app->formatter->asDatetime ($date) ,
'<br>asTimestamp ($date) = '.Yii::$app->formatter->asTimestamp ($date) ;

ผลที่ได้คือ
$date = 2016-05-26T19:41:22+02:00

dateFormat = d/M/Y
asDate ($date) = 26/5/2016
asDate ($date, ‘Y-M-d’) = 2016-5-26

datetimeFormat = d/M/Y H:i:s
asDatetime ($date) = 26/5/2016 19:41:22
asTimestamp ($date) = 1464284482

เงินก็สามารถเปลี่ยนการแสดงผลได้เหมือนกัน
สกุลเงิน

$value = 910097693;
echo '<br>$value = '.$value,
'<br>',
'<br>currencyCode = '.Yii::$app->formatter->currencyCode,
'<br>asCurrency ($value) = '.Yii::$app->formatter->asCurrency ($value) ,
'<br>asCurrency ($value, \'USD\') = '.Yii::$app->formatter->asCurrency ($value, 'USD') ;

ผลที่ได้คือ
$value = 910097693

currencyCode = THB
asCurrency ($value) = THB 910,097,693.00
asCurrency ($value, ‘USD’) = USD 910,097,693.00

ขนาดไฟล์ก็สามารถแปลงได้เหมือนกัน
ขนาดไฟล์

$value = 910097693;
echo '&lt;br>$value = '.$value,
'&lt;br>',
'&lt;br>sizeFormatBase = '.Yii::$app->formatter->sizeFormatBase,
'&lt;br>asSize ($value) = '.Yii::$app->formatter->asSize ($value) ,
'&lt;br>asShortSize ($value) = '.Yii::$app->formatter->asShortSize ($value) ,
'&lt;br>asSize ($value, 4) = '.Yii::$app->formatter->asSize ($value, 4) ;

ผลที่ได้คือ
$value = 910097693

sizeFormatBase = 1024
asSize ($value) = 867.94 mebibytes
asShortSize ($value) = 867.94 MiB
asSize ($value, 4) = 867.9368 mebibytes

อ่านเพิ่มเติม