You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IHP中处理日期?是否有默认的实现方案?

代码修改方案

你可以直接用IHP默认提供的时间工具完成需求,set语句部分有两种实现方式:

方式1:使用应用服务器当前时间(推荐)

直接调用getCurrentTime获取当前UTC时间赋值即可,修改后完整代码如下:

action UpdatePostAction { postId } = do
    post <- fetch postId
    post
        |> buildPost
        |> validateIsUnique #title
        >>= ifValid \case
            Left post -> render EditView { .. }
            Right post -> do
                now <- getCurrentTime
                post <- post
                    |> set #created_at now
                    |> updateRecord
                let t = get #title post
                setSuccessMessage $ "Post '" <> t <> "' updated"
                redirectTo PostsAction

方式2:使用数据库NOW()函数

如果需要严格使用数据库侧的当前时间,可以通过SQL表达式实现:

post <- post
    |> set #created_at (unsafeCoerce $ sqlExpr "NOW()")
    |> updateRecord

该方式需要确认字段类型和数据库返回的时间类型兼容,普通场景优先使用第一种方案。

IHP内置时间工具说明

IHP本身已经内置了完整的日期时间处理能力,不需要额外引入第三方工具:

  • 框架默认自动导入Data.Time模块的常用函数,支持时间获取、格式转换、时间差计算等常见操作
  • 生成数据库迁移脚本时如果给时间字段设置default now()的默认值,创建新记录时会自动填充当前时间,无需手动赋值
  • 视图层也内置了时间格式化的相关助手函数,可直接调用实现本地化时间展示

内容的提问来源于stack exchange,提问作者George

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:12:03