JavaScript 时间戳与日期格式互转实现方案
作者:键盘侠时间:2026-10-23 23:21:23浏览:521
本文介绍前端开发中时间戳与日期格式相互转换的多种实现方式。涵盖将当前时间转为时间戳的四种方法,包括不推荐的 Date.parse 及推荐的 getTime 和 valueOf。同时提供自定义函数 TimeToDate 和 DateToTime,支持 Y-m-d、Y年m月d日等多种格式,并处理10位与13位时间戳差异,适用于常见业务场景。
时间戳转换方法概述
在前端开发中,将时间格式转换为时间戳是常见需求,通常有以下几种实现路径。
获取当前时间戳的四种方式
<script type="text/javascript">
var date=new Date();
console.log(date);//Wed Feb 13 2019 11:40:45 GMT+0800 (中国标准时间)
// 1:不推荐这种办法,毫秒级别的数值被转化为000
var timeStamp1=Date.parse(date);
console.log(timeStamp1);//1550029245000
// 2:通过valueOf()函数返回指定对象的原始值获得准确的时间戳值
var timeStamp2=date.valueOf();
console.log(timeStamp2);//1550029245434
// 3:通过原型方法直接获得当前时间的毫秒值,准确
var timeStamp3=date.getTime();
console.log(timeStamp3);//1550029245434
// 4:将时间转化为一个number类型的数值,即时间戳
var timeStamp4=Number(date);
console.log(timeStamp4);//1550029245434
</script>
自定义日期格式化函数
在使用 JS 和 jQuery 进行开发时,发现原生环境并未直接提供时间戳格式化函数。为此,综合网络资源并自行封装了一个名为 DateToTime 的函数,该函数支持多种常见的日期输出格式。
支持的格式化模板包括:Y-m-d、Y-m-d H:i:s、Y/m/d、Y/m/d H:i:s、Y年m月d日以及 Y年m月d日 H:i:s。
需要注意的是,部分格式如仅输入 Y-m-d H:i 时,函数也能正常解析并输出结果。
TimeToDate 函数实现
/**
* [TimeToDate时间戳转换为日期]
* @param {[type]} unixTime [时间戳]
* @param {String} type [Y-m-d,Y-m-d H:i:s,Y/m/d,Y/m/d H:i:s,Y年m月d日,Y年m月d日 H:i:s]
*/
function TimeToDate(unixTime,type="Y-M-D H:i:s"){
var date = new Date(unixTime * 1000);//时间戳为10位需*1000,时间戳为13位的话不需乘1000
var datetime = "";
datetime += date.getFullYear() + type.substring(1,2);
datetime += (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + type.substring(3,4);
datetime += (date.getDate() < 10 ? '0'+(date.getDate()) : date.getDate());
if (type.substring(5,6)) {
if (type.substring(5,6).charCodeAt() > 255) {
datetime += type.substring(5,6);
if (type.substring(7,8)) {
datetime += " " + (date.getHours() < 10 ? '0'+(date.getHours()) : date.getHours());
if (type.substring(9,10)) {
datetime += type.substring(8,9) + (date.getMinutes() < 10 ? '0'+(date.getMinutes()) : date.getMinutes());
if (type.substring(11,12)) {
datetime += type.substring(10,11) + (date.getSeconds() < 10 ? '0'+(date.getSeconds()) : date.getSeconds());
};
};
};
}else{
datetime += " " + (date.getHours() < 10 ? '0'+(date.getHours()) : date.getHours());
if (type.substring(8,9)) {
datetime += type.substring(7,8) + (date.getMinutes() < 10 ? '0'+(date.getMinutes()) : date.getMinutes());
if (type.substring(10,11)) {
datetime += type.substring(9,10) + (date.getSeconds() < 10 ? '0'+(date.getSeconds()) : date.getSeconds());
};
};
};
};
return datetime;
}
TimeToDate 调用示例
TimeToDate("1515640111"); //2018-01-11 11:08:31
TimeToDate("1515640111","Y-m-d"); //2018-01-11
TimeToDate("1515640111","Y-m-d H:i"); //2018-01-11 11:08
TimeToDate("1515640111","Y-m-d H:i:s"); //2018-01-11 11:08:31
TimeToDate("1515640111","Y/m/d"); //2018/01/11
TimeToDate("1515640111","Y/m/d H:i:s"); //2018/01/11 11:08:31
TimeToDate("1515640111","Y年m月d日"); //2018年01月11日
TimeToDate("1515640111","Y年m月d日 H:i:s"); //2018年01月11日 11:08:31
DateToTime 日期转时间戳函数
/**
* [DateToTime 日期转换时间戳]
* @param {[type]} day [日期格式,仅支持标准格式]
*/
function DateToTime(day){
// re = /(\d{4})(?:-(\d{1,2})(?:-(\d{1,2}))?)?(?:\s+(\d{1,2}):(\d{1,2}):(\d{1,2}))?/.exec(day); // 原
re = /(\d{4})(?:\D?(\d{1,2})(?:\D?(\d{1,2}))?[^\d\s]?)?(?:\s+(\d{1,2})\D?(\d{1,2})\D?(\d{1,2}))?/.exec(day);
return new Date(re[1],(re[2]||1)-1,re[3]||1,re[4]||0,re[5]||0,re[6]||0).getTime()/1000;
}
DateToTime("2018-01-11 11:08:31");
DateToTime("2018-01-11");
DateToTime("2018年01月11日 11时08分31秒");
DateToTime("2018");
此外,补充时间戳与日期相互转换的完整逻辑与代码实现。
另一种日期转时间戳实现
function TimeToDate(date,format) {
format = format || 'YYYY-MM-DD hh:mm:ss';
var dateTest = (/^(-)?\d{1,10}$/.test(date) || /^(-)?\d{1,13}$/.test(date));
if(/^[1-9]*[1-9][0-9]*$/.test(date) && dateTest){
var vdate = parseInt(date);
if (/^(-)?\d{1,10}$/.test(vdate)) {
vdate = vdate * 1000;
} else if (/^(-)?\d{1,13}$/.test(vdate)) {
vdate = vdate * 1000;
} else if (/^(-)?\d{1,14}$/.test(vdate)) {
vdate = vdate * 100;
} else {
alert("时间戳格式不正确");
return;
}
var setdate = new Date(vdate);
return parse({YYYY:setdate.getFullYear(), MM:digit(setdate.getMonth()+1), DD:digit(setdate.getDate()) , hh:digit(setdate.getHours()), mm:digit(setdate.getMinutes()), ss:digit(setdate.getSeconds()) }, format);
}else {
//将日期转换成时间戳
var arrs = date.match(/\w+|d+/g),
newdate = new Date(arrs[0],parseInt(arrs[1])-1,arrs[2],arrs[3]||0,arrs[4]||0,arrs[5]||0),
timeStr = Math.round(newdate.getTime() / 1000);
return timeStr;
}
function parse(ymdhms, format) {
var regymdzz = "YYYY|MM|DD|hh|mm|ss|zz";
return format.replace(new RegExp(regymdzz,"g"), function(str, index) {
return str == "zz" ? "00":digit(ymdhms[str]);
});
};
function digit(num) {
return num < 10 ? "0" + (num | 0) :num;
};
};
对前述内容进行简要总结。
至此,关于 JS 时间戳与日期格式互相转换的示例介绍完毕。如需了解更多相关内容,建议搜索本站历史文章或继续阅读后续章节,感谢支持。
作者最新文章
免登录快速分享代码:适合面试协作的轻量级JS在线运行工具推荐
2026-11-05 14:45:59
JS空字符串和纯空格转浮点数的结果是什么
2026-11-05 11:04:42
JS在线格式化缩进混乱怎么办?配置项调整技巧
2026-11-04 23:27:25
JS怎么获取秒级时间戳
2026-11-03 21:45:29
JS时间戳怎么从毫秒转换为秒
2026-11-03 20:04:14
