如何在PHP中将datetime的日期部分转换为timestamp?
这问题我之前也碰到过,核心逻辑就是把原日期时间的时分秒部分重置为00:00:00,再转成时间戳就行。给你整理了几个主流编程语言的实现方案:
解决方法:提取日期部分并转换为当日0点的时间戳
Python
用datetime模块的replace方法直接清零时分秒,再转时间戳:
from datetime import datetime # 原日期时间对象 dt = datetime(2018, 2, 26, 20, 30, 0) # 重置时分秒、微秒为0 dt_date_only = dt.replace(hour=0, minute=0, second=0, microsecond=0) # 转换为秒级时间戳 timestamp = dt_date_only.timestamp() print(timestamp) # 输出:1519603200.0
如果是字符串格式的日期,先转成datetime对象再处理:
dt_str = "2018-02-26 20:30:00" dt = datetime.strptime(dt_str, "%Y-%m-%d %H:%M:%S") dt_date_only = dt.replace(hour=0, minute=0, second=0, microsecond=0) timestamp = dt_date_only.timestamp()
JavaScript
创建Date对象后,手动设置时分秒为0,再用getTime()获取毫秒级时间戳:
// 原日期时间字符串 const dtStr = "2018-02-26 20:30:00"; // 转成兼容浏览器的Date对象 const dt = new Date(dtStr.replace(' ', 'T')); // 清零时分秒、毫秒 dt.setHours(0, 0, 0, 0); // 毫秒级时间戳,要秒级就除以1000 const timestamp = dt.getTime(); console.log(timestamp); // 输出:1519603200000
Java
推荐用Java 8+的新日期API,更简洁:
import java.time.LocalDateTime; import java.time.ZoneOffset; public class Main { public static void main(String[] args) { // 原日期时间 LocalDateTime dt = LocalDateTime.of(2018, 2, 26, 20, 30, 0); // 重置时分秒、纳秒为0 LocalDateTime dtDateOnly = dt.withHour(0).withMinute(0).withSecond(0).withNano(0); // 转换为UTC+8时区的秒级时间戳 long timestamp = dtDateOnly.toEpochSecond(ZoneOffset.of("+8")); System.out.println(timestamp); // 输出:1519603200 } }
如果用旧版Calendar类:
import java.util.Calendar; public class Main { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); cal.set(2018, Calendar.FEBRUARY, 26, 20, 30, 0); // 清零时分秒、毫秒 cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); // 获取毫秒级时间戳 long timestamp = cal.getTimeInMillis(); System.out.println(timestamp); // 输出:1519603200000 } }
小提醒
- 时区很关键:不同时区下当日0点的时间戳差异很大,一定要和业务需求的时区保持一致(比如UTC、本地时区)。
- 如果是从数据库取数据,有些数据库本身支持提取日期部分(比如MySQL的
DATE()函数),可以先在数据库层面处理,效率更高。
内容的提问来源于stack exchange,提问作者hd.
相关产品推荐
相关产品推荐

