Chrono Mock
ภาษาไทย

ควรทดสอบวันที่ไหน?

การทดสอบวันที่ครึ่งหนึ่งคือการเลื่อนนาฬิกา อีกครึ่งหนึ่งคือการรู้ว่าจะเลื่อนไปที่ไหน เครื่องคิดเลขออนไลน์บอกคุณได้ว่าเก้าสิบวันนับจากวันนี้คือวันอะไร แต่จะไม่บอกว่าวันนั้นเป็นวันหยุดธนาคาร หรือเป็นวันสุดท้ายของไตรมาส

เครื่องคิดเลขของ Chrono Mock ด้านซ้ายเป็นรายการสถานการณ์ที่ค้นหาได้พร้อมคำอธิบาย ตรงกลางเป็นตัวสร้างวันที่ และคอลัมน์ผลลัพธ์ทางขวาแสดงทุกรูปแบบ แต่ละรูปแบบมีปุ่มคัดลอกกำกับและมี Use this date อยู่ด้านล่าง ใต้ตัวสร้าง วันที่ 04/08/2008 ที่วางเข้ามาถูกระบุว่ากำกวม พร้อมแสดงทั้งการอ่านแบบอเมริกันและแบบโปแลนด์
ใต้ตัวสร้างคือทิศทางย้อนกลับ: วาง 04/08/2008 เข้าไป แล้วแสดงทั้งสองการอ่านแทนที่จะเดาเพียงแบบเดียว

วันทำการ พร้อมวันหยุดจริง

“สิบวันทำการข้างหน้า” ไม่ใช่เลขคณิต - ขึ้นอยู่กับว่าคุณนับในปฏิทินของประเทศใด วันเริ่มต้นเดียวกัน สิบวันเท่ากัน ได้สองคำตอบที่ต่างกัน:

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar us-banking
  result:  2027-09-16T00:00:00

$ chrono calc --base 2027-09-01T00:00:00 --shift +10bd --calendar pl
  result:  2027-09-15T00:00:00

ต่างกันหนึ่งวัน และเครื่องคิดเลขจะบอกเหตุผลถ้าคุณถามถึงวันที่อยู่ตรงกลาง:

$ chrono calc --base 2027-09-06T00:00:00 --calendar us-banking
  metadata:
    weekday       Monday
    business day  no  (us-banking)
    holiday       Labor Day
  what this date lands on:
    public holiday
    (weekend and holiday marks follow the us-banking calendar)

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

ทุกรูปแบบพร้อมกัน

แอปที่ทดสอบต้องการวันที่ในรูปแบบที่มันคาดหวัง แทนที่จะให้คุณแปลงเอง เครื่องคิดเลขพิมพ์ให้ทั้งหมด - และมีมาสก์กำหนดเองสำหรับรูปแบบที่ไม่เข้ากับมาตรฐานใดเลย

$ chrono calc --preset year-2038 --zone +00:00
Chrono Mock - date calculator
  preset:   year-2038 - 2038 boundary
  explains: Does the app survive the 32-bit Unix time boundary (2038-01-19T03:14:07Z)?
  result:  2038-01-19T03:14:07
  formats:
    ISO date      2038-01-19
    ISO datetime  2038-01-19T03:14:07+00:00
    US            01/19/2038
    PL            19.01.2038
    epoch (s)     2147483647
    epoch (ms)    2147483647000
    FILETIME      137919572470000000
    RFC 1123      Tue, 19 Jan 2038 03:14:07 GMT
  ...
  what this date lands on:
    at or past the 2038-01-19T03:14:07Z 32-bit time_t limit (Y2038)

ค่าเอพอกนั้นไม่ใช่เรื่องบังเอิญ - 2147483647 คือจำนวนที่ใหญ่ที่สุดที่จำนวนเต็มแบบมีเครื่องหมาย 32 บิตเก็บได้พอดี ซึ่งเป็นเหตุผลทั้งหมดที่วันที่นี้สำคัญ

อ่านวันที่ย้อนกลับ

ทิศทางตรงข้ามก็มีประโยชน์พอกัน: วางวันที่จากล็อกแล้วดูว่ามันคืออะไร เมื่อรูปแบบกำกวม - และ 04/08 กำกวมในครึ่งหนึ่งของโลก - จะแสดงทั้งสองการอ่านแทนที่จะเดาแบบเดียว เพราะการเดาคือที่มาของรายงานบั๊กเดิม

$ chrono calc --analyze 04/08/2027
Chrono Mock - date analysis
  input:   04/08/2027  (ambiguous - month/day order differs by locale)
  US MM/DD/YYYY:  2027-04-08  (Thursday)
  PL DD/MM/YYYY:  2027-08-04  (Wednesday)

ห่างกันสี่เดือน และตรงกับวันในสัปดาห์ที่ต่างกัน วันที่แบบ ISO ไม่กำกวมและถูกอ่านเป็นเช่นนั้น ส่วนสิ่งที่ไม่ใช่วันที่เลยจะถูกปฏิเสธแทนที่จะเดา

สร้างจากสเตป ไม่ใช่จากประโยค

ช่วงเวลาคือจุดเริ่มต้นบวกสเตป และผลลัพธ์ระหว่างทางจะแสดงหลังทุกสเตป นิพจน์ที่ให้คำตอบน่าแปลกใจจึงบอกคุณว่าเลี้ยวผิดตรงไหน สเตปมีห้าแบบ: เลื่อนด้วยหน่วย ตั้งเวลาของวัน กระโดดไปยังขอบเขตของช่วงเวลา ย้ายไปวันทำการที่ใกล้ที่สุด และแสดงใหม่ในเขตเวลาอื่น

# วินาทีสุดท้ายก่อนขึ้นปีใหม่
chrono calc --base today --snap eoy

# เก้าสิบวันทำการข้างหน้า ตามปฏิทินธนาคารอเมริกัน
chrono calc --base today --shift +90bd --calendar us-banking

# ถอยหลังสิบแปดปีกับอีกหนึ่งวัน สำหรับตรวจอายุ
chrono calc --base today --shift -18y --shift -1d

วันที่ที่คำนวณได้ทุกวันส่งเข้าเซสชันแทนที่เวลาได้โดยตรง และ --json ส่งออกผลลัพธ์เดียวกันในรูปแบบสำหรับเครื่อง วันที่ที่ควรทดสอบ →

ลองใช้