Angular2中如何将输入字符串转换为时间戳?
当然有简便方法啦!针对不同的编程语言,都有成熟的工具来完成这个转换,我给你整理了几个最常用场景的实现方式:
Python 实现方案
Python的datetime模块就能轻松搞定这个需求。首先你需要把输入的字符串解析成datetime对象,再转换为秒级时间戳。注意你的字符串格式是月/日/年 时:分:秒,所以要指定对应的格式符%m/%d/%Y %H:%M:%S。
from datetime import datetime date_str = "5/4/2018 11:49:01" # 按照指定格式解析字符串为datetime对象 dt_obj = datetime.strptime(date_str, "%m/%d/%Y %H:%M:%S") # 转换为秒级时间戳(注意:默认是本地时区,若需UTC时间戳需额外设置时区) timestamp = int(dt_obj.timestamp()) print(timestamp)
如果需要UTC时区的时间戳,可以这样调整:
from datetime import datetime, timezone dt_obj = datetime.strptime(date_str, "%m/%d/%Y %H:%M:%S").replace(tzinfo=timezone.utc) timestamp = int(dt_obj.timestamp())
JavaScript 实现方案
不管是浏览器环境还是Node.js,都可以用原生Date对象处理。需要注意的是,Date.parse()返回的是毫秒级时间戳,要除以1000并取整才能得到你要的秒级格式。
const dateStr = "5/4/2018 11:49:01"; // 解析字符串得到毫秒级时间戳 const timestampMs = Date.parse(dateStr); // 转换为秒级时间戳 const timestamp = Math.floor(timestampMs / 1000); console.log(timestamp);
如果担心不同环境下的解析差异,也可以手动拆分字符串来构建Date对象,避免格式歧义:
const [datePart, timePart] = "5/4/2018 11:49:01".split(" "); const [month, day, year] = datePart.split("/").map(Number); const [hour, minute, second] = timePart.split(":").map(Number); // 注意:JavaScript的月份是0开始的,所以要减1 const date = new Date(year, month - 1, day, hour, minute, second); const timestamp = Math.floor(date.getTime() / 1000);
PHP 实现方案
PHP的strtotime()函数几乎可以直接识别这种日期格式,返回的就是秒级时间戳,非常省心:
$dateStr = "5/4/2018 11:49:01"; $timestamp = strtotime($dateStr); echo $timestamp;
如果需要更严格的格式控制,也可以用DateTime类的createFromFormat方法:
$dateObj = DateTime::createFromFormat('m/d/Y H:i:s', "5/4/2018 11:49:01"); $timestamp = $dateObj->getTimestamp(); echo $timestamp;
关键注意点
- 时区影响:不同语言的默认时区可能不同,如果你的业务需要统一使用UTC时间戳,一定要手动设置时区,否则转换结果会出现偏差。
- 格式匹配:解析时的格式符必须和输入字符串的格式完全对应,比如你的例子是
月/日/年,就不能误用日/月/年的格式规则,否则会解析出错误的时间。
内容的提问来源于stack exchange,提问作者Sergio Mendez
相关产品推荐
相关产品推荐

