gpt4 book ai didi

elixir - 验证一个日期比另一个日期晚或相同

转载 作者:行者123 更新时间:2023-12-01 21:12:03 26 4
gpt4 key购买 nike

我想验证 ends_on总是晚于或与 starts_on 相同的日期.但是我的自定义验证不起作用。编写此验证的正确方法是什么?

defmodule Example.Calendar.VacationPeriod do
use Ecto.Schema
import Ecto.Changeset
alias Example.Calendar.VacationPeriod

schema "vacation_periods" do
field :ends_on, :date
field :name, :string
field :starts_on, :date

timestamps()
end

@doc false
def changeset(%VacationPeriod{} = vacation_period, attrs) do
vacation_period
|> cast(attrs, [:name, :starts_on, :ends_on])
|> validate_required([:name, :starts_on, :ends_on])
|> validate_dates_make_sense
end

defp validate_dates_make_sense(changeset) do
starts_on = get_field(changeset, :starts_on)
ends_on = get_field(changeset, :ends_on)

if starts_on > ends_on do
add_error(changeset, :starts_on, "cannot be later than 'ends_on'")
else
changeset
end
end
end

最佳答案

你无法比较 Date使用比较运算符的结构。 Date模块有一个 compare/2 您可以使用的功能:

if Date.compare(starts_on, ends_on) == :gt do
add_error(changeset, :starts_on, "cannot be later than 'ends_on'")
else
changeset
end

或与 case :
case Date.compare(starts_on, ends_on) do
:gt -> add_error(changeset, :starts_on, "cannot be later than 'ends_on'")
_ -> changeset
end

关于elixir - 验证一个日期比另一个日期晚或相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46281493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com