การคำนวณวันที่ในอนาคตหรืออดีต

Elm:
การคำนวณวันที่ในอนาคตหรืออดีต

วิธีการ:

โมดูล Time ของ Elm และแพ็คเกจ justinmimbs/time-extra ช่วยให้เราจัดการกับวันที่ได้ง่ายๆ

import Time exposing (Posix)
import Time.Extra as TimeExtra

--calculateDate : Int -> Posix -> Posix
-- @deltaDays: จำนวนวันที่จะเพิ่ม (ใช้เครื่องหมายลบเพื่อลด)
-- @fromDate: วันที่เริ่มต้นในรูปแบบ Posix

calculateDate deltaDays fromDate =
    TimeExtra.add TimeExtra.days deltaDays fromDate

-- การใช้งาน
-- อย่าลืมว่า Elm นับเวลาเป็นมิลลิวินาทีนับตั้งแต่ยุค Unix

sampleDate = Time.millisToPosix 1580515200000  -- 1 กุมภาพันธ์ 2020 00:00:00 UTC
futureDate = calculateDate 10 sampleDate       -- เพิ่ม 10 วัน
pastDate = calculateDate -15 sampleDate        -- ลด 15 วัน

-- ตัวอย่างผลลัพธ์:
-- futureDate -> 1581552000000  -- 12 กุมภาพันธ์ 2020 00:00:00 UTC
-- pastDate -> 1580006400000    -- 17 มกราคม 2020 00:00:00 UTC

ข้อมูลเพิ่มเติม

ก่อนหน้านี้ การจัดการวันที่ในการเขียนโปรแกรมเป็นเรื่องยาก ระบบต่างๆ, รูปแบบ, และเขตเวลาที่แตกต่างกันสร้างความปวดหัวให้กับทุกคน โมดูล Time ของ Elm ที่อิงตามระบบ Unix Time (มิลลิวินาทีนับตั้งแต่ปี 1970) ทำให้มาตรฐานนี้ แพ็คเกจ justinmimbs/time-extra แสดงถึงการทำให้การจัดการ operations ต่างๆ เกี่ยวกับวันที่ เช่น การเพิ่มหรือลบวัน ง่ายขึ้น

ทางเลือกอื่น? ภาษาการเขียนโปรแกรมอื่นๆ มีไลบรารีของตัวเอง เช่น datetime ของ Python หรือ Date ของ JavaScript แต่วิธีการของ Elm นำเสนอการพิมพ์ที่แข็งแรงและความบริสุทธิ์ ช่วยลดข้อผิดพลาด

นอกจากการเพิ่มวันแล้ว คุณยังสามารถทำงานกับเดือน, ปี, หรือแม้กระทั่งชั่วโมงและนาที ฟังก์ชันใน Elm และในแพ็คเกจเช่น time-extra มุ่งเน้นไปที่ความไม่เปลี่ยนแปลงและฟังก์ชันบริสุทธิ์—นั้นหมายความว่าไม่มีผลข้างเคียง คุณคิดคำนวณวันที่ใหม่ ได้โดยที่วันที่เดิมยังคงไม่เปลี่ยนแปลง

ดูเพิ่มเติม