top of page
ค้นหา
รูปภาพนักเขียนSathit Jittanupat

"moment/dev-thai", a date library that has never been merged

อัปเดตเมื่อ 23 ก.ย. 2566



ผมกำลังหัดตั้งคำถามกับ AI แล้วก็คิดถึงข้อจำกัดขององค์ความรู้ต่าง ๆ ในบริบทของไทย น่าจะต้องใช้เวลาอีกหน่อย กว่าจะรู้วิธีสั่งหรือตั้งคำถาม และกว่า AI จะเรียนรู้เข้าใจและตอบคำถามได้อย่างที่คาดหวัง


โต๊ะห่างออกไปน่าจะเป็นทนายหรือคนที่อยู่ในแวดวางกฏหมาย เสียงคุยโทรศัพท์ปรึกษางานดังแว่วมา นึกเล่น ๆ ว่าต่อให้เรารวบรวมประมวลกฏหมายอิเลคโทรนิกส์โหลดให้ AI เรียนรู้ แต่จะสู้ความพลิกแพลงของมนุษย์ได้หรือเปล่า ค่านิยมที่ยกย่องวิธีการแบบศรีธนญชัย เป็นดีเอ็นเอที่แทรกซึมไปอยู่ทั่วทุกวงการ เมื่อโลกกว้างขึ้นก็รู้สึกว่าการเชื่อในคุณค่าแบบนี้ ทำให้เรามีปัญหากับการเป็นพลเมืองโลก


เมื่อประมาณสิบปีที่แล้ว ตอนที่เริ่มทำโปรเจกท์ ERP มีอย่างน้อย 2 เรื่องที่ผมวางแผนไว้ว่าต้องเขียนขึ้นมาใช้เอง คือ ข้อความจำนวนเงินภาษาไทย กับ การจัดการกับปีพุทธศักราช ผมไม่รู้ว่าสมัยนั้นทำได้อย่างไรจึงผลักดันให้โปรแกรมเมอร์ที่พัฒนา Microsoft Excel ใส่ฟังก์ชั่นที่สำคัญ "BAHTTEXT" และมี "bbbb" แทนสัญญลักษณ์สำหรับรูปแบบวันที่ปี พ.ศ.


เมื่อต้องใช้ JavaScript โชคดีที่มี Moment.js ที่ทำมาเป็น date library และรองรับการแปลเป็นภาษาไทยด้วย สามารถใช้คำสั่ง format แสดงภาษาไทย ชื่อวัน (อาทิตย์, จันทร์,​ อังคาร, ..) และ ชื่อเดือนทั้งแบบย่อและคำเต็ม


ส่วนที่ขาดไปคือ ไม่สามารถแสดงปีพุทธศักราช ดังนั้นผมจึงตัดสินใจปรับปรุงเพิ่ม "BB" และ "BBBB" สำหรับแสดงปีพ.ศ. แบบย่อและเต็ม หลังจากนั้นก็ส่ง PR (pull request) เพื่อขอให้ merge กลับเข้าไปที่เจ้าของโปรเจกท์


ตัวอย่างเช่น

moment("2023-09-19").format("DD/MM/BBBB") 
จะได้ผลลัพธ์เป็น "19/09/2566"


ผลปรากฏว่าถูกปฏิเสธ ด้วยเหตุผลว่าไม่ควรมีสัญลักษณ์ที่ไม่มาตรฐานนอกเหนือจาก "YYYY" ซึ่งตอนนั้นก็ไม่ทันคิดอะไรมาก ด้วยความไม่รู้โลกกว้าง ทำให้ผมเข้าใจว่า locale ของไทยก็มีความสำคัญที่ผู้พัฒนาต่าง ๆ ควรสนับสนุนให้อยู่ในโค้ดมาตรฐาน เมื่อชี้แจงโดยอ้างอิง Excel ไปแล้ว ก็เลยไม่ได้พยายามผลักดันต่อ




dev-thai ซุกเก็บอยู่ใน github repo ของผมนานจนจำไม่ได้ เพราะอยู่ใน branch ย่อยอีกทีหนึ่ง หลังจากที่ขอ merge ครั้งนั้นแล้วก็ไม่ได้สนใจอีกเลย



วันนี้ AI ให้คำตอบ ที่ทำให้ผมกระจ่าง ว่าระบบปีพุทธศักราชอยู่ตรงไหนในโลกโปรแกรมเมอร์ ทำไมจึงไม่ได้ merge เข้าเป็นส่วนหนึ่งของ date library


"ประเทศไทยเป็นประเทศเดียวที่ใช้ระบบปีพุทธศักราชเป็นระบบราชการอย่างเป็นทางการ"

"Pale Blue Dot" คาร์ล เซแกน บรรยายความรู้สึกเมื่อเห็นภาพถ่ายจากขอบสุริยะจักรวาล ดาวโลกของเราเป็นเพียงจุดสีฟ้าจาง ๆ ประเทศไทยก็เป็นจุดเล็ก ๆ ในจักรวาลของคนพัฒนาโปรแกรม


เพราะเป็นเช่นนี้เอง ทำให้ยุคแรกเริ่มของการนำคอมพิวเตอร์มาใช้ในประเทศไทย จำเป็นต้องหรี่ตาข้างหนึ่ง มิฉะนั้นโปรแกรมจากต่างประเทศที่พัฒนามาใช้ระบบปีคริสต์ศักราช (ค.ศ.) จะนำมาใช้ไม่ได้ บางแห่งก็ใช้วิธี breaking rule หลอกใส่ปีเป็น 25xx โดยไม่สนใจว่าโปรแกรมจะตีความผิด การคำนวณวันขอสัปดาห์ไม่ถูกต้อง และวันที่ 29 กุมภาพันธ์ใช้ไม่ได้


ผมเคยตั้งข้อสังเกตว่า คนไทยมีความสามารถพิเศษอ่านเลขปีของทั้งสองระบบโดยไม่รู้สึกติดขัด โดยเฉพาะแวดวงคนใช้คอมพิวเตอร์และทำงานบัญชี ใครเคยสังเกตบ้างว่าทำไมปฏิทินไทยต้องมีทั้งเลขปีพ.ศ.และค.ศ. และเผลอ ๆ ก็อาจมีทั้งเลขอาราบิคและเลขไทยอีกด้วย โชคดีที่คนในแวดวงคอมพิวเตอร์ส่วนใหญ่เป็นเอกฉันท์เลือกใช้เลขอาราบิค อาจเป็นเพราะปุ่มบนคีย์บอร์ดเลขไทยกดไม่สะดวกก็ได้



ประกาศกรมสรรพากร ป.86/2542 ระบุว่า วัน เดือน ปี ที่ออกใบกำกับภาษี วัน เดือน ปี ตามวรรคหนึ่ง ใช้ตัวเลขแทนการระบุชื่อเดือนก็ได้และใช้พุทธศักราชหรือคริสต์ศักราชก็ได้


ประเทศอื่นเขาใช้ระบบปีเดียวเป็นหลัก ทำให้ locale ใช้ "YYYY" เพื่อแสดงค่าปีได้ ยกเว้นของไทยนี่แหละ ที่ไม่สามารถบังคับได้จริง หากใช้ปีคริสต์ศักราช ก็ผิดระเบียบราชการ หากใช้ปีพุทธศักราชก็กลายเป็นประเทศส่วนน้อยในโลก สื่อสารกับใครไม่ได้ โปรแกรมเปิดบิลเวอร์ชั่นภาษาไทย ตอนป้อนข้อมูลวันที่ก็อย่างหนึ่ง ตอนพิมพ์ฟอร์มออกมาก็อาจจะเป็นปีไทย หรือปีฝรั่งก็ได้


ในที่สุดก็เข้าใจแล้วว่าโลกไม่ได้หมุนรอบตัวเรา ยอมรับความแปลกประหลาด เป็นอะไรที่โปรแกรมเมอร์ประเทศอื่นไม่เข้าใจว่าทำไมต้องทำ library ให้แสดงวันที่ได้สองศักราชภายใน locale ภาษาไทย เพราะบางครั้งอาจต้องแสดงปีศักราชทั้งสองระบบภายในเอกสารใบเดียวกัน ทั้ง "YYYY" และ "BBBB" เหมือนกับการออกแบบปฏิทินให้คนไทยใช้งานที่ต้องรวมฟังก์ชั่น พุทธ คริสต์ พราหมณ์ และโชคลาภเข้าด้วยกัน


อ้างอิง

ดู 2 ครั้ง0 ความคิดเห็น

โพสต์ล่าสุด

ดูทั้งหมด

Comments


Post: Blog2_Post
bottom of page