Flash – ตกแต่งปุ่มกดด้วยข้อความใส่ filter

15/07/2013

Flash – Action Script 3 กับตำแหน่งและการเคลื่อนที่ของวัตถุขั้นพื้นฐาน

30/07/2013

Flash – Action Script 3 กับวันเวลาแบบไทยๆ

16/07/2013
empty image
empty image

มาดูวิธีการแปลงรูปแบบวันเวลาเดิมซึ่งเป็นรูปแบบสากล เป็นแบบไทย โดยเราจะ Array มาให้เก็บข้อความวัน เดือน ซึ่งเป็นภาษาไทย แล้วใช้ตัวเลขบอกวันเดือน มาเป็นตัวชี้ค่าดัชนีใน Array จะเป็นยังไง เราไปดูกันเลย…

ย้อนความหลังกันซักหน่อย
ในคลาส Date มันจะมีคุณสมบัติของวันเวลาอยู่คือ (เอาเฉพาะที่เราจะใช้)
.day
.date
.month
.fullyear
.hours
.minutes
.seconds

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

var now:Date = new Date();
var str_thai_date:String="วัน"+now.day+" ที่ "+now.date+" เดือน "+now.month+" ปี "+now.fullYear+" เวลา "+now.hours+":"+now.minutes+":"+now.seconds+" นาฬิกา";
trace(str_thai_date)

ผลจะเป็น
วัน2 ที่ 16 เดือน 7 ปี 2013 เวลา 22:18:17 นาฬิกา

โดยที่วันเริ่มที่ วันอาทิตย์คือ 0 และจบที่วันเสาร์คือ 6
ส่วนเดือนเริ่มที่ เดือนมกราคมคือ 0 และจบที่ ธันวาคมคือ 11

ดังนั้นอาเรย์ของวันเราก็จะเป็น
(“อาทิตย์”,”จันทร์”,”อังคาร”,”พุธ”,”พฤหัสบดี”,”ศุกร์”,”เสาร์”);

และอาเรย์ของเดือนก็จะเป็น
(“มกราคม”,”กุมพาพันธ์”,”มีนาคม”,”เมษายน”,”พฤษภาคม”,”มิถุนายน”,”กรกฎาคม”,”สิงหาคม”,”กันยายน”,” ตุลาคม”,”พฤศจิกายน”,”ธันวาคม”);

พอเข้าใจนะ เวลาเรียก ก็จะเป็น วัน[2] แบบนี้ก็จะเป็นวัน…. วันอังคาร

ลองลงมือเขียนกันเลย

var now:Date = new Date();
var thai_day:Array=new Array("อาทิตย์","จันทร์","อังคาร","พุธ","พฤหัสบดี","ศุกร์","เสาร์");
var thai_month:Array=new Array("มกราคม","กุมพาพันธ์","มีนาคม","เมษายน","พฤษภาคม","มิถุนายน","กรกฎาคม","สิงหาคม","กันยายน"," ตุลาคม","พฤศจิกายน","ธันวาคม");
var thai_year:Number=now.fullYear+543;
var str_thai_date:String="วัน"+thai_day[now.day]+" ที่ "+now.day+" เดือน "+thai_month[now.month]+" ปี "+thai_year+" เวลา "+now.hours+":"+now.minutes+":"+now.seconds+" นาฬิกา";
trace(str_thai_date);

อธิบายด้านล่างละกัน
บรรทัด 1 ประกาศตัวแปลวันเวลา หรือจะเรียกว่าสร้าง Object วันเวลาขึ้นมาก็ได้มั้ง
บรรทัด 2 สร้างอาเรย์เก็บชื่อวันเป็นภาษาไทย
บรรทัด 3 สร้างอาเรย์เดือนเก็บชื่อเดือนเป็นภาษาไทย
บรรทัด 4 ปีปกติจะเป็น ค.ศ. เราก็แปลงเป็น พ.ศ. โดยการ บวก 543
บรรทัด 5 กำหนดข้อความที่จะส่งออกให้เก็บไว้ที่ตัวแปล str_thai_date
บรรทัด 6 พิมพ์ค่าออกทาง output

อธิบายบรรทัดที่ 5 เพิ่มเติม
thai_day[now.day] ก็คือแสดงค่าในอาเรย์ตำแหน่งที่ [now.day] ซึ่ง now.day คือตัวเลขของวันในสัปดาห์ สำหรับวันนี้ก็จะเป็นเลข 2 ซึ่งก็คือ thai_day[2] ตำแหน่งที่ 2 ของอาเรย์นี้ก็คือ “อังคาร” นั่นเอง ส่วนตัวอื่นๆ ก็เหมือนกัน
พอดีอยากลองเพิ่มตัวเลขเป็นเลขไทยด้วยหล่ะ ทำไง จริงๆ สามารถใช้อาเรย์ก็ได้ แต่เนื่องจากตัวเลขไทยมันเป็นอักขระที่มีอยู่แล้วในตาราง Unicode เราไม่ต้องกำหนดขึ้นมาใหม่ก็ได้ ต่างกับชื่อวันและเดือนมันไม่มีหน่ะสิ เราเลยต้องกำหนดเอง ผมเขียนเองไม่เป็นอ่ะ ฮ่าๆๆ เลยไปหามาได้ว่า

เพิ่มโค้ดนี้ต่อท้ายโค้ดด้านบนเลยนะ

function toThaiNum(num){
 var str = String(num);
 for(var i=0;i<10;i++)
  str = str.split(String(i)).join(String.fromCharCode(i+3664));
 return str;
}
trace(toThaiNum(str_thai_date));

หลักการทำงานก็คือ
รับค่าเข้าฟังก์ชัน เก็บในตัวแปร str จากนั้นใช้ split ไล่ตัดตัวเลข 0 ถึง 9
จากนั้นใช้ join แทรกอักขระเข้าไป ซึ่ง ๐ มันมีเลขประจำตัวคือ 3664 ไล่ไปจนถึง 9 ลองดูการทำงานในแต่ละลูป
i = 0 > 123456789๐
i = 1 > ๑23456789๐
i = 2 > ๑๒3456789๐
i = 3 > ๑๒๓456789๐
i = 4 > ๑๒๓๔56789๐
i = 5 > ๑๒๓๔๕6789๐
i = 6 > ๑๒๓๔๕๖789๐
i = 7 > ๑๒๓๔๕๖๗89๐
i = 8 > ๑๒๓๔๕๖๗๘9๐
i = 9 > ๑๒๓๔๕๖๗๘๙๐

เข้าใจไหม… ขอบคุณโค้ดจาก http://www.thaiflashdev.com/home/index.php?topic=5380.0

ก็หมดแล้วหล่ะนะกับการแสดงวันเวลาในรูปแบบไทยๆ …Zzz