thai_buddhist_date 0.4.0 copy "thai_buddhist_date: ^0.4.0" to clipboard
thai_buddhist_date: ^0.4.0 copied to clipboard

A small Dart package for parsing and formatting Thai Buddhist (พ.ศ.) dates.

thai_buddhist_date #

pub package CI license: MIT

Pure Dart package สำหรับตรวจสอบ parse และ format วันที่แบบพุทธศักราช (พ.ศ.) หรือคริสต์ศักราช (ค.ศ.) โดยไม่พึ่ง Flutter

ต้องการ calendar/picker UI ให้ใช้ thai_buddhist_date_pickers

Thai Buddhist date demo

Install #

dependencies:
  thai_buddhist_date: ^0.4.0

Format และ parse #

import 'package:thai_buddhist_date/thai_buddhist_date.dart';

Future<void> main() async {
  await ThaiDateService().initializeLocale('th_TH');

  final date = DateTime(2025, 8, 22);
  print(format(date, pattern: 'dd/MM/yyyy')); // 22/08/2568
  print(format(date, pattern: 'd MMMM yyyy')); // 22 สิงหาคม 2568
  print(format(date, pattern: 'yyyy-MM-dd', era: Era.ce)); // 2025-08-22

  final parsed = parse('22/08/2568', format: 'dd/MM/yyyy');
  print(parsed); // 2025-08-22 00:00:00.000
}

format และ ThaiCalendar.format รองรับ preset เช่น fullText, shortDate, longDate, dmy, iso และ pattern ของ intl เช่น yyyy-MM-dd, HH:mm, d MMMM yyyy

Validate วันที่ #

ใช้ ThaiDate.safe เมื่อต้องการ reject วันที่ไม่มีจริงในทุก build mode:

final leapDay = ThaiDate.safe(
  year: 2567,
  month: 2,
  day: 29,
  era: Era.be,
);

print(leapDay.isValid); // true
// ThaiDate.safe(year: 2568, month: 2, day: 29); throws ArgumentError

constructor ThaiDate(...) เดิมยังคงอยู่เพื่อ backward compatibility

Parse แล้ว format แบบ async #

ThaiDateService.convert ใช้ locale เดียวกันตลอด parse → format และคืน null เมื่อ parse ไม่สำเร็จ:

final output = await ThaiDateService().convert(
  '22/08/2568',
  fromPattern: 'dd/MM/yyyy',
  toPattern: 'd MMMM yyyy',
  inputEra: Era.be,
  toEra: Era.be,
  locale: 'fr',
);
// 22 août 2568

Extensions #

final beYear = DateTime(2025, 8, 22).beYear; // 2568
final ceYear = 2568.toCE; // 2025
final fromDouble = 2568.0.toCE; // 2025.0
final label = DateTime(2025, 8, 22).toThaiStringSync(
  pattern: 'yyyy-MM-dd',
);

Locale behavior #

  • ใช้ locale code ที่ intl รองรับ เช่น th_TH, en_US, fr
  • เรียก initializeLocale ก่อนใช้ชื่อเดือนหรือวันใน locale นั้น
  • locale ที่ใช้ไม่ได้จะ fallback ไปยัง locale ที่ตั้งค่าไว้ใน service โดยค่าเริ่มต้นคือ th_TH

Dependency injection #

repository interfaces ถูก export จาก package entry point จึงสร้าง service สำหรับ test หรือ integration เฉพาะทางได้:

final service = ThaiDateService.create(
  formatterRepository: customFormatterRepository,
  parserRepository: customParserRepository,
);

Compatibility #

public API เดิมยังคงอยู่ในรอบนี้ โดย architectureType, ListEquality และ ParseThaiDateUseCase.convert ถูก deprecate เพื่อเตรียมถอดใน release อนาคต ใช้ ThaiDateService.convert แทนสำหรับ parse → format

ดูตัวอย่างที่รันได้ใน example/main.dart และประวัติการเปลี่ยนแปลงใน CHANGELOG.md

2
likes
160
points
326
downloads

Documentation

API reference

Publisher

verified publisherkidpech.app

Weekly Downloads

A small Dart package for parsing and formatting Thai Buddhist (พ.ศ.) dates.

Repository (GitHub)
View/report issues
Contributing

Topics

#thai #buddhist #be #date

License

MIT (license)

Dependencies

intl

More

Packages that depend on thai_buddhist_date