แปลง Timestamp ไปเป็น Timeago ด้วย Yii Framework 2 รองรับภาษาไทย

wave
มานพ กองอุ่น 12 เม.ย. 2017 10:31:59 7,545

Timeago เป็นเรื่องหนึ่งที่ค่อนข้างสำคัญเช่นกัน เป็นการกำหนดรายละเอียดการแสดงผลวันที่ เช่น 1 วันที่ผ่านมา 2 เดือนที่แล้ว หรือ ปีที่แล้ว เป็นต้น โดยมี package ของ jQuery ที่จะแปลงข้อมูลวันเดือนปีและเวลาไปเป็น Timeago ให้อัตโนมัติ ทั้งนี้เราต้องเตรียมข้อมูลให้อยู่ในรูปแบบที่ถูกต้องเสียก่อน

ตัวอย่างนี้เป็นการบันทึกข้อมูลในรูปแบบ Timestamp เช่น 1491655406

การติดตั้ง

สามารถติดตั้ง package ผ่าน composer โดยพิมพ์คำสั่ง

composer require yiidoc/yii2-timeago

การใช้งาน

สามารถเรียกใช้งานผ่าน widget ได้ลักษณะดังนี้

use yii\timeago\TimeAgo;
echo TimeAgo::widget(['timestamp' => $post->updated_at, 'language' => 'th']);

$post->updated_at คือ timestamp ส่วน 'language' => 'th' เป็นการระบุภาษาที่แสดงผล

ดูเพิ่มเติมได้ที่

https://github.com/yiidoc/yii2-timeago
https://packagist.org/packages/yiidoc/yii2-timeago

สามารถปรับเปลี่ยนข้อความที่แสดงผลได้ที่ vendor/bower/jquery-timeago/locals/jquery.timeago.th.js

jQuery.timeago.settings.strings = {
  prefixAgo: null,
  prefixFromNow: null,
  suffixAgo: "ที่แล้ว",
  suffixFromNow: "จากตอนนี้",
  seconds: "น้อยกว่าหนึ่งนาที",
  minute: "ประมาณหนึ่งนาที",
  minutes: "%d นาที",
  hour: "ประมาณหนึ่งชั่วโมง",
  hours: "ประมาณ %d ชั่วโมง",
  day: "หนึ่งวัน",
  days: "%d วัน",
  month: "ประมาณหนึ่งเดือน",
  months: "%d เดือน",
  year: "ประมาณหนึ่งปี",
  years: "%d ปี",
  wordSeparator: "",
  numbers: []
};

นอกจากในรูปแบบ Timestamp แล้วยังสามารถใช้งานได้กับรูปแบบอื่นๆ อีก เช่น

<?=TimeAgo::widget(['timestamp' => date('Y-m-d H:i:s'), 'language' => 'th'])?>

ตัวอย่างการใช้งานใน GridView

<?= GridView::widget([
                        'dataProvider' => $dataProvider,
                        'summary' => false,
                        'columns' => [
                            //...
                            [
                                'label' => 'อ่าน',
                                'value' => function ($model) {
                                    return $model->view_count;
                                }
                            ],
                            [
                                'label' => 'โพสล่าสุด',
                                'format' => 'raw',
                                'value' => function ($model) {
                                    return TimeAgo::widget(['timestamp' => $model->updated_at, 'language' => 'th']);
                                    
                                }
                            ],
                        ]

                    ]) ?>

 


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 7,545
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags yii2 timeago timestamp
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง