如何设置默认时间戳为now() + n天?认证流程Token过期时间配置
如何为Token的过期时间戳自动增加n小时/天?
嘿,这个需求太常见啦!我之前做认证系统的时候也经常碰到,其实不用自己手动算时间戳,各种主流数据库都有内置函数能直接帮你给当前时间加上指定时长,既准确又省事儿。下面分几种常用数据库给你具体的实现方式:
MySQL/MariaDB 实现
MySQL里可以用 DATE_ADD() 或者 ADDTIME() 函数来实现:
- 增加n小时:
DATE_ADD(NOW(), INTERVAL 2 HOUR)(把2换成你需要的小时数即可) - 增加n天:
DATE_ADD(NOW(), INTERVAL 7 DAY)(7就是你要设置的天数) - 也可以用更简洁的写法:
NOW() + INTERVAL 3 HOUR
实际插入Token的时候,SQL语句大概是这样:
INSERT INTO user_tokens (user_id, token, expires) VALUES (123, 'xxx-xxx-xxx', DATE_ADD(NOW(), INTERVAL 24 HOUR));
PostgreSQL 实现
PostgreSQL的语法更直观,直接用 + INTERVAL 就行:
- 增加n小时:
NOW() + INTERVAL '4 hours' - 增加n天:
CURRENT_TIMESTAMP + INTERVAL '7 days'
插入示例:
INSERT INTO user_tokens (user_id, token, expires) VALUES (123, 'xxx-xxx-xxx', NOW() + INTERVAL '2 days');
SQL Server 实现
SQL Server用 DATEADD() 函数,参数顺序是「时间单位,增量,当前时间」:
- 增加n小时:
DATEADD(HOUR, 6, GETDATE()) - 增加n天:
DATEADD(DAY, 3, GETUTCDATE())
小提示:推荐用
GETUTCDATE()代替GETDATE(),避免时区差异导致的过期时间不准问题
插入示例:
INSERT INTO user_tokens (user_id, token, expires) VALUES (123, 'xxx-xxx-xxx', DATEADD(HOUR, 12, GETUTCDATE()));
额外小建议:应用层处理
如果你不想依赖数据库函数,也可以在应用代码里计算好过期时间再存到数据库。比如:
- Python里用
datetime.datetime.now() + datetime.timedelta(hours=2) - Java里用
LocalDateTime.now().plusHours(2)
这样做的好处是跨数据库通用,只要保证应用和数据库的时区一致就没问题。
内容的提问来源于stack exchange,提问作者Sergei Basharov
相关产品推荐
相关产品推荐

