AngularJS:如何将日期存储为原日期且时间固定为00:00:00格式
嘿,这个问题我之前帮好几个开发者解决过!要把datepicker选的日期存进数据库时,固定时间为00:00:00.000Z,其实可以从前端预处理或者后端兜底处理两个方向入手,看你更适合哪一种:
前端预处理(推荐优先)
直接在前端把选中的日期调整为当天零点,再传给后端,这样后端不用额外处理。这里给几个常用场景的实现:
原生JavaScript
假设你从datepicker拿到了Date类型的选中日期:
// 拿到datepicker返回的日期对象 const selectedDate = document.getElementById('your-datepicker').valueAsDate; // 重置时分秒毫秒为0 const fixedDate = new Date(selectedDate); fixedDate.setHours(0, 0, 0, 0); // 转成符合要求的ISO格式字符串 const formattedDate = fixedDate.toISOString(); // 此时formattedDate就是 "2018-05-21T00:00:00.000Z",直接传给后端存库即可
用Moment.js简化代码
如果你的项目里已经在用Moment.js,一行代码就能搞定:
import moment from 'moment'; const formattedDate = moment(selectedDate).startOf('day').toISOString(); // startOf('day')会自动把时间设为当天的00:00:00,转成ISOString就是你要的格式
组件自带配置(部分UI库支持)
比如Element UI、Ant Design这类UI框架的日期选择器,本身支持配置返回格式,直接指定时间为零点:
<!-- Element UI DatePicker示例 --> <el-date-picker v-model="selectedDate" type="date" value-format="yyyy-MM-ddT00:00:00.000Z" ></el-date-picker>
这样组件返回的selectedDate直接就是你想要的格式,不用手动处理。
后端兜底处理
如果前端无法修改(比如第三方组件限制),可以在后端接收数据时修正时间:
Java 示例
假设你用Spring Boot接收数据,把日期字符串转成LocalDateTime并重置时间:
import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; // 假设从前端接收的日期字符串是"2018-05-21T18:30:00.000Z" String receivedDateStr = "2018-05-21T18:30:00.000Z"; // 先解析成LocalDate(只取日期部分) LocalDate selectedDate = LocalDate.parse(receivedDateStr, DateTimeFormatter.ISO_DATE_TIME); // 拼接当天零点的时间 LocalDateTime fixedDateTime = selectedDate.atStartOfDay(); // 转成数据库需要的格式,或者直接把LocalDateTime存入支持该类型的字段 String formattedDate = fixedDateTime.format(DateTimeFormatter.ISO_DATE_TIME) + "Z";
Python 示例
用Python的datetime模块处理:
from datetime import datetime, time received_date_str = "2018-05-21T18:30:00.000Z" # 解析字符串为datetime对象 selected_date = datetime.fromisoformat(received_date_str.replace('Z', '+00:00')) # 组合日期和零点时间 fixed_datetime = datetime.combine(selected_date.date(), time.min) # 转成目标格式 formatted_date = fixed_datetime.isoformat(timespec='milliseconds') + "Z" # 输出结果:"2018-05-21T00:00:00.000Z"
另外要注意:如果你的数据库字段类型是DATE,那本身只会存储日期部分,不会有时间;如果是DATETIME或TIMESTAMP类型,才需要确保时间部分是零点。
内容的提问来源于stack exchange,提问作者Raghul
相关产品推荐
相关产品推荐

