js日期操作之根据指定格式获取日期

来源:互联网 发布:5年了日本核辐射知乎 编辑:程序博客网 时间:2024/06/05 11:17

今天在写前台页面的时候需要获取到指定格式的日期字符串。例如:"2017-4-3 18:00:00 Monday"。我们知道,js跟java类似,他本身包含了Date对象,查了js中Date的API后发现,其有toLocaleDateString(),toLocaleTimeString()和toLocaleString()三个直接可以获取的方法,但遗憾的是这三个方法返回的是默认格式的日期字符串:分别为"2017/4/3" ,  "下午6:00:00"  "2017/4/3 下午6:00:00",无法自定义设置。如果输出日期对格式没有要求的话,用这三个方法是非常方便的!但是如果我想获取到“2017年4月3日 18点00分00秒 星期一”或者任意自己想要的格式,那该如何获取呢?(以下以获取"2017-4-3 18:00:00 Monday"格式为例,讲诉我自己的解决方案)

我们想要得到指定格式的日期字符串是属于Date对象的功能,所以根据面向对象的思维,我们给js的Date对象添加一个原型方法Format(如果对js中原型的概念不太清楚的话,可查阅相关资料。总而言之,给一个类加上了原型方法,那么这个类的所有对象就都具备该方法了)。也许是受java的影响,我选择了将格式模板以字符串的形式传给Format方法,此模板字符串跟java中类似,年月日时分秒都必须是固定的写法,原因见后面代码。即以如下方式获得我们想要的日期格式:

String resDateString  = new Date().Format("yyyy-MM-dd HH:mm:ss ww");

由Format方法来处理得到指定的日期字符串,处理的基本思想是:将模板字符串format中的各部分用js中Date提供的方法来替换,具体如下:

Date.prototype.Format = function(format){

//替换 year yyyy
format = format.replace("yyyy",this.getFullYear().toString());


//替换 month MM  this.getMonth()返回0-11
format = format.replace("MM",(this.getMonth()+1).toString());


//替换 day dd
format = format.replace("dd",this.getDate().toString());


//替换 hour HH
format = format.replace("HH",this.getHours().toString());


//替换 minutes mm
format = format.replace("mm",this.getMinutes().toString());


//替换 seconds ss
format = format.replace("ss",this.getSeconds().toString());


//替换 weekdays ww  this.getDay()返回的是0-6
format = format.replace("ww",this.getWeekday(this.getDay()));


return format;

};

以获取星期几为例(其他类似),Date提供的getDay方法返回的是0-6的数字,分别对应Sunday-Saturday,如果我们需要输出我们自己想要的格式,那必须重新对其赋值,如下:

Date.prototype.getWeekday = function (weekdayNum){
var weekdayName = null; 
switch(weekdayNum){
case 0:weekdayName = "Sunday";break;
case 1:weekdayName = "Monday";break;
case 2:weekdayName = "Tuesday";break;
case 3:weekdayName = "Wednesday";break;
case 4:weekdayName = "Thursday";break;
case 5:weekdayName = "Friday";break;
case 6:weekdayName = "Saturday";break;
default:weekdayName = "weekday change error!";
}
return weekdayName;
};

至此,已实现了对指定格式日期字符串的获取。

说明:不一定非要把Format方法和getWeekday方法加在Date的原型上,可以自己编写一个function,将Date对象和字符串模板都穿进去处理,效果是一样的,但个人不推荐那样做,原因此处略!

1 0
原创粉丝点击