本文汇总了JavaScript中处理日期格式化的多种实用方法。内容涵盖Date对象原生API的使用、自定义Format函数扩展、toString方法重载以及个性化时间输出技巧。通过五个具体代码示例,详细解析了如何将Date对象转换为指定格式的字符串,包括年月日、星期、时分秒及毫秒数的格式化输出,帮助开发者快速掌握前端时间处理的核心技术。
基础时间同步与显示示例
示例一展示了基础的时间同步与显示功能。通过创建Date实例获取当前时间,利用switch语句判断星期几,并拼接成字符串显示在页面上。该示例主要演示了如何获取当前时间并格式化显示星期信息,核心逻辑包括获取getDay值并映射为中文星期,最后通过innerHTML更新DOM元素。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>TT</title>
<script src="jquery.js"></script>
</head>
<body>
<p style="line-height: 50%;"><span></span></p>
<input type="button" value="轻轻" onclick="syncTime()">
<script>
function syncTime(){
var mydate = new Date();
var week;
switch (mydate.getDay()){
case 1: week="星期一"; break;
case 2: week="星期二"; break;
case 3: week="星期三"; break;
case 4: week="星期四"; break;
case 5: week="星期五"; break;
case 6: week="星期六"; break;
default: week="星期天";
}
var str = "" + mydate.getFullYear() + " 年 " + (mydate.getMonth() + 1) + " 月 " + mydate.getDate() + " 日 " + week;
$('.todaytime')[0].innerHTML = str;
str = '"savesynctime" : "' + str + '"'
return str;
}
console.log(syncTime());
</script>
</body>
</html>
Date原生API与解析方法演示
示例二演示了Date对象内置方法的直接调用结果。代码中依次调用了toDateString、toTimeString、toLocaleDateString和toLocaleTimeString等方法,展示了不同格式的时间字符串输出。此外,还演示了Date.parse和Date.UTC方法对日期字符串解析为毫秒数或返回NaN的情况,体现了原生API在简单日期转换中的应用。
<script type="text/javascript">
var date = new Date();
document.writeln(date);
//Thu Jan 08 2015 01:25:53 GMT+0800 (中国标准时间)
document.writeln(Date.parse());
//NaN
document.writeln(Date.parse('6/10/2014'));
//1402329600000 毫秒数
document.writeln(Date.parse('Thu Jan 08 2015 01:25:53'));
//1420651553000 毫秒数
document.writeln(Date.UTC());
//NaN
//日期格式化方法
document.writeln('<br/>');
document.writeln(date.toDateString());
//Thu Jan 08 2015
document.writeln('<br/>')
document.writeln(date.toTimeString());
//01:39:08 GMT+0800 (中国标准时间)
document.writeln('<br/>')
document.writeln(date.toLocaleDateString());
//2015年1月8日
document.writeln('<br/>')
document.writeln(date.toLocaleTimeString());
//上午1:39:08
document.writeln('<br/>')
document.writeln(date.toUTCString());
//Wed, 07 Jan 2015 17:39:08 GMT
//一些set,get方法
</script>
自定义Format扩展方法实现
示例三提供了一个自定义的Date.prototype.Format扩展方法。该方法接收格式字符串,通过正则表达式替换yyyy、yy、MM、dd、HH、mm、ss等占位符,将其替换为对应的年、月、日、时、分、秒数值。代码中特别处理了月份和日期小于10时补零的逻辑,实现了通用的日期时间格式化功能,适用于需要自定义格式字符串的场景。
Date.prototype.Format = function(formatStr) {
var str = formatStr;
var Week = ['日', '一', '二', '三', '四', '五', '六'];
str = str.replace(/yyyy|YYYY/, this.getFullYear());
str = str.replace(/yy|YY/, (this.getYear() % 100) > 9 ? (this.getYear() % 100).toString() : '0' + (this.getYear() % 100));
str = str.replace(/MM/, (this.getMonth() + 1) > 9 ? (this.getMonth() + 1).toString() : '0' + (this.getMonth() + 1));
str = str.replace(/M/g, (this.getMonth() + 1));
str = str.replace(/w|W/g, Week[this.getDay()]);
str = str.replace(/dd|DD/, this.getDate() > 9 ? this.getDate().toString() : '0' + this.getDate());
str = str.replace(/d|D/g, this.getDate());
str = str.replace(/hh|HH/, this.getHours() > 9 ? this.getHours().toString() : '0' + this.getHours());
str = str.replace(/h|H/g, this.getHours());
str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes().toString() : '0' + this.getMinutes());
str = str.replace(/m/g, this.getMinutes());
str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds().toString() : '0' + this.getSeconds());
str = str.replace(/s|S/g, this.getSeconds());
return str
}
toString重载与多语言支持
示例四展示了另一种Date.prototype.toString的重载实现。该方法允许传入格式字符串和语言环境参数(如loc)。内部构建time对象存储年、月、日、时、分、秒等字段,并根据格式字符串中的特殊标记(如EEE表示星期)进行替换。示例中演示了中文和英文环境下的不同输出结果,支持更复杂的格式定制,如包含毫秒数或特定星期显示格式。
Date.prototype.toString=function(format,loc){
var time={};
time.Year=this.getFullYear();
time.TYear=(""+time.Year).substr(2);
time.Month=this.getMonth()+1;
time.TMonth=time.Month<10?"0"+time.Month:time.Month;
time.Day=this.getDate();
time.TDay=time.Day<10?"0"+time.Day:time.Day;
time.Hour=this.getHours();
time.THour=time.Hour<10?"0"+time.Hour:time.Hour;
time.hour=time.Hour<13?time.Hour:time.Hour-12;
time.Thour=time.hour<10?"0"+time.hour:time.hour;
time.Minute=this.getMinutes();
time.TMinute=time.Minute<10?"0"+time.Minute:time.Minute;
time.Second=this.getSeconds();
time.TSecond=time.Second<10?"0"+time.Second:time.Second;
time.Millisecond=this.getMilliseconds();
time.Week=this.getDay();
var MMMArrEn=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
var MMMArr=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"];
var WeekArrEn=["Sun","Mon","Tue","Web","Thu","Fri","Sat"];
var WeekArr=["星期日","星期一","星期二","星期三","星期四","星期五","星期六"];
var oNumber=time.Millisecond/1000;
if(format!=undefined && format.replace(/\s/g,"").length>0){
if(loc!=undefined && loc =="en"){
MMMArr=MMMArrEn.slice(0);
WeekArr=WeekArrEn.slice(0);
}
format=format
.replace(/yyyy/ig,time.Year)
.replace(/yyy/ig,time.Year)
.replace(/yy/ig,time.TYear)
.replace(/y/ig,time.TYear)
.replace(/MMM/g,MMMArr[time.Month-1])
.replace(/MM/g,time.TMonth)
.replace(/M/g,time.Month)
.replace(/dd/ig,time.TDay)
.replace(/d/ig,time.Day)
.replace(/HH/g,time.THour)
.replace(/H/g,time.Hour)
.replace(/hh/g,time.Thour)
.replace(/h/g,time.hour)
.replace(/mm/g,time.TMinute)
.replace(/m/g,time.Minute)
.replace(/ss/ig,time.TSecond)
.replace(/s/ig,time.Second)
.replace(/fff/ig,time.Millisecond)
.replace(/ff/ig,oNumber.toFixed(2)*100)
.replace(/f/ig,oNumber.toFixed(1)*10)
.replace(/EEE/g,WeekArr[time.Week]);
}
else{
format=time.Year+"-"+time.Month+"-"+time.Day+" "+time.Hour+":"+time.Minute+":"+time.Second;
}
return format;
}
var d=new Date();
console.log(d.toString()); //2014-7-27 9:26:52
console.log(d.toString("")); //2014-7-27 9:26:52
console.log(d.toString("yyyy-MM-dd HH:mm:ss")); //2014-07-27 09:26:52
console.log(d.toString("yyyy年MM月dd日 HH:mm:ss")); //2014年07月27日 09:26:52
console.log(d.toString("yyyy-MM-dd HH:mm:ss fff")); //2014-07-27 09:26:52 237
console.log(d.toString("yyyy年 MMM dd EEE")); //2014年 七月 27 星期五
console.log(d.toString("yyyy MMM dd EEE","en")); //2014 Jul 27 Fri
时间个性化输出功能
示例五演示了时间个性化输出功能。在示例四的基础上,进一步封装了处理逻辑,支持更灵活的日期显示策略。该部分代码可能涉及对特定业务场景下时间显示规则的定制,例如根据用户偏好或业务需求调整日期的呈现方式,体现了JavaScript在时间处理上的灵活性。
/*
1、< 60s, 显示为“刚刚”
2、>= 1min && < 60 min, 显示与当前时间差“XX分钟前”
3、>= 60min && < 1day, 显示与当前时间差“今天 XX:XX”
4、>= 1day && < 1year, 显示日期“XX月XX日 XX:XX”
5、>= 1year, 显示具体日期“XXXX年XX月XX日 XX:XX”
*/
function timeFormat(time){
var date = new Date(time),
curDate = new Date(),
year = date.getFullYear(),
month = date.getMonth() + 10,
day = date.getDate(),
hour = date.getHours(),
minute = date.getMinutes(),
curYear = curDate.getFullYear(),
curHour = curDate.getHours(),
timeStr;
if(year < curYear){
timeStr = year +'年'+ month +'月'+ day +'日 '+ hour +':'+ minute;
}else{
var pastTime = curDate - date,
pastH = pastTime/3600000;
if(pastH > curHour){
timeStr = month +'月'+ day +'日 '+ hour +':'+ minute;
}else if(pastH >= 1){
timeStr = '今天 ' + hour +':'+ minute +'分';
}else{
var pastM = curDate.getMinutes() - minute;
if(pastM > 1){
timeStr = pastM +'分钟前';
}else{
timeStr = '刚刚';
}
}
}
return timeStr;
}
以上所述就是本文的全部内容了,希望大家能够喜欢。