rata死于unix时间

rata die to unix time

我正在尝试将 Date.Datejustinmimbs/date 包转换为 Time.Posixelm/time 或自 UNIX 纪元以来的毫秒整数。

我目前的方法如下,但似乎效果不佳。

dateToPosixTime : Date.Date -> Time.Posix
dateToPosixTime date =
    Time.millisToPosix (Date.toRataDie date - 719162 * (1000 * 60 * 60 * 24))

(719162是1970年1月1日到0001年1月1日的偏移量)

这似乎有效,但它不再给我工作结果

另一种方法:

dateToPosixTime : Date.Date -> Time.Posix
dateToPosixTime date =
    Time.millisToPosix ((Date.toRataDie date - epochStartOffset) * (1001 * 60 * 60 * 24) - (1000 * 60 * 60 * 24))

好的,基本上我描述的第二种方法是有效的,如果你不小心写了 1001 * 60 * 60 * 24 而不是正确的 1000 * 60 * 60 * 24,因为一秒只有 1000 毫秒,而不是 1001.

因此工作代码是:

epochStartOffset : Int
epochStartOffset =
    719162


dateToPosixTime : Date.Date -> Time.Posix
dateToPosixTime date =
    Time.millisToPosix ((Date.toRataDie date - epochStartOffset) * (1000 * 60 * 60 * 24) - (1000 * 60 * 60 * 24))

如果您希望明确您正在使用的日期(UTC?纽约?尼泊尔?),justinmimbs/time-extra has a convenient partsToPosix function,可以轻松创建具有签名 Zone -> Date -> Posix

的明确函数
midnightOfDate : Zone -> Date -> Posix
midnightOfDate zone date =
    TE.partsToPosix zone
        { year = Date.year date
        , month = Date.month date
        , day = Date.day date
        , hour = 0
        , minute = 0
        , second = 0
        , millisecond = 0
        }

在 Elm 回复上:

> Date.fromRataDie 719163 |> Date.toIsoString
"1970-01-01" : String

> midnightOfDate Time.utc (Date.fromRataDie 719163)
Posix 0 : Time.Posix