给自己做个时间戳

博主与朋友文文约定,各自给三年后的自己写一封信,并在睡前完成了这封信的撰写。为纪念这一刻,博主创建了时间戳,期待三年后的开启。
昨天晚上,和文文聊天中,我们约定,都给三年后的自己写一封信,睡觉前,信已经写好了,我在这里先做个时间戳,等待三年后的我。
<think> 我们正在讨论时间戳相关的代码编写。用户之前的问题涉及Java中的@Temporal注解,但当前请求是编写时间戳代码。根据引用内容,用户提供了JavaScript和C#的时间戳转换示例,因此我将提供JavaScript版本的时间戳与日期转换函数,因为JS是前后端通用的语言。 时间戳通常有两种:一种是秒级(如Unix时间戳,10位数字),另一种是毫秒级(13位数字)。在JavaScript中,Date对象使用毫秒级时间戳。 需求分析: 1. 时间戳转日期:输入一个时间戳(毫秒级或秒级),返回格式化的日期字符串。 2. 日期转时间戳:输入一个日期字符串(或Date对象),返回时间戳(毫秒级)。 注意:如果传入的是秒级时间戳,需要乘以1000转换为毫秒级。 根据引用[1]中的JS代码,我们可以进行优化和修正。引用[1]中的函数存在一些问题,例如: - 函数getTimeStamp实际上是获取当前时间的格式化字符串,并不是转换时间戳到日期。 - 日期转时间戳的函数date没有使用传入的参数,而是使用了当前时间。 因此,我将编写两个函数: 1. timestampToDate(timestamp): 将时间戳转换为格式化的日期字符串(格式如:'2021-09-19 11:21:52')。 2. dateToTimestamp(dateString): 将日期字符串转换为时间戳(毫秒级)。 另外,考虑引用[3]中的时间格式化方式,我们可以自定义格式。 步骤: 1. 时间戳转日期函数: - 判断时间戳是秒级(10位)还是毫秒级(13位),如果是秒级则乘以1000。 - 使用new Date(timestamp)创建日期对象。 - 格式化日期对象为字符串。 2. 日期转时间戳函数: - 使用new Date(dateString)创建日期对象(注意:日期字符串需要是合法的格式,如'2021-09-19 11:21:52')。 - 使用getTime()方法获取毫秒级时间戳。 注意:日期字符串的格式解析可能有浏览器兼容性问题,建议使用YYYY-MM-DD HH:mm:ss格式。 我们将编写两个函数,并给出使用示例。 另外,为了增强健壮性,可以添加参数验证。 代码实现如下: </think> ### 时间戳相关代码实现 以下提供 JavaScript 和 Python 两种语言的时间戳处理方案,包含时间戳与日期的互相转换函数: #### **JavaScript 实现** ```javascript /** * 时间戳转日期(支持秒/毫秒级时间戳) * @param {number} timestamp - 时间戳(10位秒级或13位毫秒级) * @param {string} [format='YYYY-MM-DD hh:mm:ss'] - 日期格式 * @returns {string} 格式化日期 */ function timestampToDate(timestamp, format = 'YYYY-MM-DD hh:mm:ss') { // 统一转为毫秒级时间戳 const ts = timestamp < 1e12 ? timestamp * 1000 : timestamp; const date = new Date(ts); const padZero = num => num.toString().padStart(2, '0'); const maps = { 'YYYY': date.getFullYear(), 'MM': padZero(date.getMonth() + 1), 'DD': padZero(date.getDate()), 'hh': padZero(date.getHours()), 'mm': padZero(date.getMinutes()), 'ss': padZero(date.getSeconds()), 'ms': date.getMilliseconds() }; return format.replace(/YYYY|MM|DD|hh|mm|ss|ms/g, match => maps[match]); } /** * 日期转时间戳 * @param {string|Date} date - 日期字符串或Date对象 * @returns {number} 毫秒级时间戳 */ function dateToTimestamp(date) { return new Date(date).getTime(); } // ===== 使用示例 ===== const nowTimestamp = Date.now(); // 当前时间戳(毫秒级) console.log("当前时间戳:", nowTimestamp); // 时间戳转日期 console.log("格式化日期:", timestampToDate(nowTimestamp)); // 默认格式 console.log("自定义格式:", timestampToDate(1690838400000, 'YYYY年MM月DD日')); // 日期转时间戳 console.log("转换结果:", dateToTimestamp("2023-08-01 12:00:00")); // 1690838400000 console.log("转换结果:", dateToTimestamp(new Date())); // 当前时间戳 ``` #### **Python 实现** ```python import time from datetime import datetime def timestamp_to_date(timestamp: float, fmt: str = "%Y-%m-%d %H:%M:%S") -> str: """时间戳转日期(支持秒/毫秒级)""" # 处理毫秒级时间戳 ts = timestamp if timestamp > 1e10 else timestamp * 1000 return datetime.fromtimestamp(ts / 1000).strftime(fmt) def date_to_timestamp(date_str: str, fmt: str = "%Y-%m-%d %H:%M:%S") -> int: """日期转毫秒级时间戳""" dt = datetime.strptime(date_str, fmt) return int(dt.timestamp() * 1000) # ===== 使用示例 ===== if __name__ == "__main__": now_ts = time.time() * 1000 # 当前毫秒级时间戳 print("当前时间戳:", now_ts) # 时间戳转日期 print("格式化日期:", timestamp_to_date(now_ts)) print("自定义格式:", timestamp_to_date(1690838400000, "%Y/%m/%d %H:%M")) # 日期转时间戳 print("转换结果:", date_to_timestamp("2023-08-01 12:00:00")) # 1690838400000 ``` ### 核心功能说明 1. **时间戳转日期** - 自动识别秒级(10位)或毫秒级(13位)时间戳 - 支持自定义输出格式(如 `YYYY-MM-DD` 或 `YYYY年MM月DD日 hh:mm`) - JavaScript 使用正则替换实现灵活格式化,Python 使用 `strftime` 标准库 2. **日期转时间戳** - 返回毫秒级时间戳(Unix 标准) - 支持字符串日期和 Date 对象(JS)/ datetime 对象(Python)输入 - 日期字符串需明确格式(如 `2023-08-01 12:00:00`) 3. **时区处理** - 代码默认使用系统时区 - 需处理时区时可在转换时添加偏移量(如 JS 的 `getTimezoneOffset()`) ### 示例输出 ``` // JavaScript 示例输出 当前时间戳: 1690838400000 格式化日期: 2023-08-01 12:00:00 自定义格式: 2023年08月01日 # Python 示例输出 当前时间戳: 1690838400000.0 格式化日期: 2023-08-01 12:00:00 转换结果: 1690838400000 ``` --- ### 相关问题 1. 如何处理不同时区的时间戳转换? 2. 时间戳精度(秒级/毫秒级)在数据库存储中有哪些差异? 3. 如何在 React/Vue 前端项目中实现实时更新的时间戳显示器? 4. 时间戳与 ISO 8601 日期格式如何互相转换? ### 参考文档 [时间戳转换原理参考][^1] [跨语言时间处理对比][^2] [日期格式化方法详解][^3] [^1]: 时间戳转换基础方法 [^2]: C#与JS时间戳实现对比 [^3]: JS日期格式化组件实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值