Elm:如何在字符串日期中获取昨天日期
Elm : How to get YESTERDAY date in String Date
假设我有这个模型:
type alias Model =
{ currentDate : String
, yesterdayDate : String
}
我从 Html input type date
(日期选择器)得到的 CurrentDate 的格式是 YYYY-MM-DD
Html表格
input [ name "date", type_ "date", onInput UpdateDate ] []
Update.elm
UpdateDate date ->
let
-- Get Yesterday Date function here
in
( { model | currentDate = date, yesterdayDate = "" }, Cmd.none )
在这种情况下,如何在字符串中获取昨天的日期?
我的想法是将 day
解析为 INT 并使用减法方法得到昨天,但我找不到任何方法来做到这一点...任何帮助都非常感谢。
将字符串日期转换为 Posix
,将 Posix
转换为纪元以来的毫秒数,减去一天中的毫秒数,将得到的毫秒数转换回 Posix 和Posix 到 ISO8601 字符串。从该字符串中取出前 10 个字符。
module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
import Iso8601
import Time exposing (Posix)
sampleDate =
"2020-05-01"
subtractDays : Int -> Posix -> Posix
subtractDays days time =
(Time.posixToMillis time - (days * 24 * 60 * 60 * 1000))
|> Time.millisToPosix
subtractDaysFromIsoDate : Int -> String -> String
subtractDaysFromIsoDate days date =
Iso8601.toTime date
|> Result.map (subtractDays days >> Iso8601.fromTime >> String.left 10)
|> Result.withDefault date
main =
text <| subtractDaysFromIsoDate 1 sampleDate
请注意,在此实现中,如果字符串不是有效日期,它将不加修改地返回,而不是失败。您可能想要捕获此操作可能会失败的信息。
因为您可以相信您从 html 获得了有效的字符串格式并且了解 date package,您可以将日期字符串拆分为 3 个字符串,将每个字符串转换为整数,然后将今天和昨天构造为 Date
值。
您应该问自己的问题:
- 您真的要将日期存储为
String
吗? Date
类型可能更有用,如果你想做其他事情然后只显示字符串值。
- 您真的要同时存储今天和昨天吗?后者可以在需要时轻松计算。
字符串拆分示例:
case
String.split "-" date
|> List.map String.toInt
of
[ Just year, Just monthInt, Just day ] ->
-- convert monthInt to `Month`
-- construct current date
-- add -1 `Day`
Debug.todo "todo" 2
_ ->
Debug.todo "invalid date format" date
假设我有这个模型:
type alias Model =
{ currentDate : String
, yesterdayDate : String
}
我从 Html input type date
(日期选择器)得到的 CurrentDate 的格式是 YYYY-MM-DD
Html表格
input [ name "date", type_ "date", onInput UpdateDate ] []
Update.elm
UpdateDate date ->
let
-- Get Yesterday Date function here
in
( { model | currentDate = date, yesterdayDate = "" }, Cmd.none )
在这种情况下,如何在字符串中获取昨天的日期?
我的想法是将 day
解析为 INT 并使用减法方法得到昨天,但我找不到任何方法来做到这一点...任何帮助都非常感谢。
将字符串日期转换为 Posix
,将 Posix
转换为纪元以来的毫秒数,减去一天中的毫秒数,将得到的毫秒数转换回 Posix 和Posix 到 ISO8601 字符串。从该字符串中取出前 10 个字符。
module Main exposing (main)
import Browser
import Html exposing (Html, button, div, text)
import Html.Events exposing (onClick)
import Iso8601
import Time exposing (Posix)
sampleDate =
"2020-05-01"
subtractDays : Int -> Posix -> Posix
subtractDays days time =
(Time.posixToMillis time - (days * 24 * 60 * 60 * 1000))
|> Time.millisToPosix
subtractDaysFromIsoDate : Int -> String -> String
subtractDaysFromIsoDate days date =
Iso8601.toTime date
|> Result.map (subtractDays days >> Iso8601.fromTime >> String.left 10)
|> Result.withDefault date
main =
text <| subtractDaysFromIsoDate 1 sampleDate
请注意,在此实现中,如果字符串不是有效日期,它将不加修改地返回,而不是失败。您可能想要捕获此操作可能会失败的信息。
因为您可以相信您从 html 获得了有效的字符串格式并且了解 date package,您可以将日期字符串拆分为 3 个字符串,将每个字符串转换为整数,然后将今天和昨天构造为 Date
值。
您应该问自己的问题:
- 您真的要将日期存储为
String
吗?Date
类型可能更有用,如果你想做其他事情然后只显示字符串值。 - 您真的要同时存储今天和昨天吗?后者可以在需要时轻松计算。
字符串拆分示例:
case
String.split "-" date
|> List.map String.toInt
of
[ Just year, Just monthInt, Just day ] ->
-- convert monthInt to `Month`
-- construct current date
-- add -1 `Day`
Debug.todo "todo" 2
_ ->
Debug.todo "invalid date format" date