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

AdonisJS 5查询Employees表时如何将dob列格式化为YYYY-MM-DD

在AdonisJS 5中格式化Employees表的dob字段为YYYY-MM-DD格式

下面提供几种实用的实现方式,根据你的业务场景选择即可:

方法1:在模型中针对单个字段配置序列化

通过Lucid模型的@column.date()装饰器的serialize回调,直接指定该字段的输出格式,这种方式只作用于当前字段,灵活性高。

// app/Models/Employee.ts
import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'

export default class Employee extends BaseModel {
  @column({ isPrimary: true })
  public id: number

  @column()
  public name: string

  // 为dob字段指定序列化格式
  @column.date({
    serialize: (value: DateTime) => value.toFormat('yyyy-MM-dd')
  })
  public dob: DateTime
}

方法2:自定义模型序列化逻辑

如果需要同时处理多个日期字段,或者要对模型输出做更多自定义,可以重写模型的serialize方法:

// app/Models/Employee.ts
import { DateTime } from 'luxon'
import { BaseModel, column } from '@ioc:Adonis/Lucid/Orm'

export default class Employee extends BaseModel {
  @column({ isPrimary: true })
  public id: number

  @column()
  public name: string

  @column.date()
  public dob: DateTime

  @column.date()
  public join_date: DateTime

  // 重写序列化方法,统一处理日期字段
  public serialize() {
    const serialized = super.serialize()
    // 格式化dob和join_date
    serialized.dob = this.dob.toFormat('yyyy-MM-dd')
    serialized.join_date = this.join_date.toFormat('yyyy-MM-dd')
    return serialized
  }
}

方法3:查询时通过数据库函数格式化

直接在数据库查询阶段完成格式化,适合不需要模型实例、追求性能的场景,不同数据库的函数语法略有区别:

MySQL 示例

// 控制器代码
import Database from '@ioc:Adonis/Lucid/Database'

export default class EmployeesController {
  public async index() {
    const employees = await Database.from('employees')
      .select(
        'id',
        'name',
        Database.raw('DATE_FORMAT(dob, "%Y-%m-%d") as dob')
      )
    return employees
  }
}

PostgreSQL 示例

// 控制器代码
import Database from '@ioc:Adonis/Lucid/Database'

export default class EmployeesController {
  public async index() {
    const employees = await Database.from('employees')
      .select(
        'id',
        'name',
        Database.raw('TO_CHAR(dob, \'YYYY-MM-DD\') as dob')
      )
    return employees
  }
}

方法4:全局统一日期格式

如果项目中所有日期字段都需要输出YYYY-MM-DD格式,可以修改全局配置:

// config/app.ts
export default {
  // ...其他配置项
  dateFormat: 'yyyy-MM-dd',
}

注意:全局配置会覆盖所有默认序列化的日期字段,如果有个别字段需要特殊格式,需单独用方法1或2处理。

内容的提问来源于stack exchange,提问作者NITISH KUMAR Jha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:01:03