PlusMagi's Blog By Pitt Phunsanit JavaScript,Vue.js Vue.js: DateLocale.vue Component

Vue.js: DateLocale.vue Component

ลองสร้าง vue component เป็น One-way Binding Component ที่ทำหน้าที่ง่าย ๆ ในการรับ datetime แล้วแสดงออกมาเป็น locale ( รูปแบบท้องถิ่น ) สำหรับใช้ใน laravel ดู
resources/js/Components/DateLocale.vue

<script lang="ts">
interface Window {
 locales: string[];
 datetimeOptions: {
 year: 'numeric' | '2-digit';
 month: 'numeric' | '2-digit';
 day: 'numeric' | '2-digit';
 hour: 'numeric' | '2-digit';
 minute: 'numeric' | '2-digit';
 };
}

export default {
 computed: {
 formattedDate(this: { datetime: string }) {
  const date: Date = new Date(this.datetime);
  if (!window.datetimeOptions) {
  console.warn('window.datetimeOptions is undefined, using default options');
  window.datetimeOptions = {
   year: 'numeric',
   month: 'numeric',
   day: 'numeric',
   hour: 'numeric',
   minute: 'numeric'
  };
  }
  const datetimeOptions = {
  ...window.datetimeOptions,
  year: window.datetimeOptions.year as 'numeric' | '2-digit',
  month: window.datetimeOptions.month as 'numeric' | '2-digit',
  day: window.datetimeOptions.day as 'numeric' | '2-digit',
  hour: window.datetimeOptions.hour as 'numeric' | '2-digit',
  minute: window.datetimeOptions.minute as 'numeric' | '2-digit'
  };
  const userLocales = window.userLocales ? [...window.userLocales] : ['en-US'];

  return date.toLocaleDateString(userLocales, datetimeOptions);
 }
 },
 name: 'DateLocale',
 props: {
 datetime: {
  type: String,
  required: true
 }
 }
}
</script>

<template>
 <div>{{ formattedDate }}</div>
</template>

บรรทัดที่ 40 คือ ชื่อ
บรรทัดที่ 41 คือ ตัว attribute ที่จะรับ datetime เข้ามา
ประกาศตัวแปรใน resources/js/app.ts

//config variables
const datetimeOptions = {
 day: 'numeric',
 hour: 'numeric',
 minute: 'numeric',
 month: 'short',
 year: 'numeric'
};
window.datetimeOptions = datetimeOptions;

const locales = (navigator.languages && navigator.languages.length) ? navigator.languages : navigator.language || 'en';
window.locales = locales;

เป็น format รูปแบบการแสดงผล และภาษาที่ user ใช้อยู่

อย่าลืม register component ใน app.ts หรือ vue.ts เช่น
app.component('date-locale', DateLocale)

ใน view เช่น resources/views/tickets/show.blade.php ใช้โดย
<date-locale datetime="{{ $ticket->created_at }}" />

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