如何在Elm中创建日期变量

10

我想在 Elm 中的记录中硬编码一个日期。记录签名是:

type alias Record = { .., startDate : Date, .. }

在我的代码中,我正在做

record = { .., startDate = Date.fromString "2011/1/1", .. }

问题在于Record类型要求日期类型,但是Date.fromString的签名是

String -> Result.Result String Date.Date

我该如何创建可用于记录类型日期

1个回答

14

由于将字符串解析为日期失败的可能性,您会得到Result。您可以通过以下两种方法之一来处理它。

忽略错误

如果您只想说“我知道这个字符串是有效的日期,我不担心我可能已经搞砸了”,那么您可以提供一个默认日期。

Date.fromString "2011/1/1" |> Result.withDefault (Date.fromTime 0)

如果解析失败,它会留下一个 Date 对象,默认为 Unix 纪元时间。

使用方法

在使用日期时,请考虑解析失败的情况,并在使用日期的地方进行处理。例如,如果您将其显示为字符串,则可以显示日期,如果解析失败,则显示 "TBA"

注意:您可能已经注意到 Date.fromTime 只返回一个 Date 对象而不是 Result(因为 Int 总是可以解析为 Date)。如果您不介意将日期转换为 Unix 时间戳,则可以硬编码时间戳并在不必处理 Result 的情况下使用该时间戳。


在 repl 中,Date.fromString "2011/1/1" |> Result.withDefault (Date.fromTime 0) 返回:{} : Date.Date。仍然没有日期... - BoumTAC
Date.Date 类型不太适合 toString,会显示为 {}。如果尝试 (Date.fromString "2011/1/1" |> Result.withDefault (Date.fromTime 0) |> (\d -> (Date.year d, Date.month d, Date.day d))),你应该会看到 (2011,Jan,1) : ( Int, Date.Month, Int ) - robertjlooby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接