您的位置:首页 > Web前端 > JavaScript

【连载】实用小demo连载 3 —— js 时间转换 demo

2015-08-06 16:10 591 查看
小demo连载系列3

博主自己封装了时间转换的函数,

分别能获取用户浏览器时区,时区时间转换,将给定日期计算为今天、昨天、前天(支持跨年,跨月)

demo下载地址(所有连载的demo都是免费):
http://download.csdn.net/detail/snow_finland/8968371
具体代码(由于写demo的时候,写了非常完备的代码注释,这里就不做赘述了):

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
<meta name="viewport" content="initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>Time Demo</title>
</head>

<body>
<script type="text/javascript">
/*
* Time Demo v 1.0.0
* Copyright 2015-08-06 Jane
*
* get_time_zone() 获取用户浏览器时区(东时区为正数,西时区为负数)
*
* format_time(time,type,return_type) 将时间戳转换为时间戳/时间
* time 格式为 '2015-08-06T12:00:00.000Z' 的时间戳字符串
* type 类型,0代表将0时区时间戳转换为8时区(用户浏览器时区),1代表将8时区(用户浏览器时区)时间戳转换为0时区
* return_type 输出类型,0代表输出时间字符串,格式为'2014-07-05 03:00:00',1代表输出时间戳字符串,格式为'2015-08-06T12:00:00.000Z'
*
* format_date(time,return_type) 格式化日期,计算为今天、昨天、前天、XX月XX日(同一年份)、XXXX年XX月XX日(不同年份)
* time 格式为 '2015-08-06T12:00:00.000Z' 的时间戳字符串
* return_type 输出类型,0:输出格式为'今天/昨天/前天/XX月XX日(同一年份)/XXXX年XX月XX日(不同年份)',1:输出格式为'今天/昨天/前天/XX月XX日(同一年份)/XXXX年XX月XX日(不同年份) XX:XX'
*/
var time = {
get_time_zone : function(){
// 获取格林威治时间和本地时间之间的时差(以分钟为单位),然后转换为时区(东时区为正数,西时区为负数)
var d = new Date()
var gmtHours = -(d.getTimezoneOffset()/60);
return gmtHours
},
format_time : function(time,type,return_type){ // 格式 time = '2015-08-06T12:00:00.000Z',type: 0(0->8),1(8->0),return_type:0(时间),1(时间戳)
var self = this;

// 获取时区
var time_gap = self.get_time_zone();

// 将时间戳字符串转换为便于加减修改的js日期时间对象
var o = time.replace('T',' ').replace('Z','').replace('-','/').replace('-','/').substring(0,19);
var std = new Date(o);

// 判断类型,对日期时间对象进行重设时间到对应时区时间
if(type == 0){ // 如果是0时区转换为8时区(用户浏览器时区),那么小时是加上时区数
std.setHours( std.getHours() + time_gap );
}else{ // 如果是8时区(用户浏览器时区)转换为0时区,那么是减去时区数
std.setHours( std.getHours() - time_gap );
}

// 获取重设之后时间对象的各个参数
var tmp = {
year : std.getFullYear(),
month : std.getMonth() + 1,
date : std.getDate(),
hour : std.getHours(),
minute : std.getMinutes(),
second : std.getSeconds()
}

var time1;

// 根据返回类型,组成最后的输出格式
if(	return_type == 0 ){ // 输出时间字符串,格式为'2014-07-05 03:00:00'
time1 = tmp.year + '-' + ( tmp.month < 10 ? '0' + tmp.month : tmp.month ) + '-' + ( tmp.date < 10 ? '0' + tmp.date : tmp.date ) + ' ' + ( tmp.hour < 10 ? '0' + tmp.hour : tmp.hour ) + ':' + ( tmp.minute < 10 ? '0' + tmp.minute : tmp.minute ) + ':' + ( tmp.second < 10 ? '0' + tmp.second : tmp.second );
}else{ // 输出时间戳字符串,格式为'2015-08-06T12:00:00.000Z'
time1 = tmp.year + '-' + ( tmp.month < 10 ? '0' + tmp.month : tmp.month ) + '-' + ( tmp.date < 10 ? '0' + tmp.date : tmp.date ) + 'T' + ( tmp.hour < 10 ? '0' + tmp.hour : tmp.hour ) + ':' + ( tmp.minute < 10 ? '0' + tmp.minute : tmp.minute ) + ':' + ( tmp.second < 10 ? '0' + tmp.second : tmp.second ) + '.000Z';
}

return time1;
},
format_date : function(time,return_type){ // 格式 time = '2015-08-06T12:00:00.000Z',return_type:0(日期),1(日期+时间)
// 获取今天js日期时间对象和各个需要的参数
var today = new Date();
var return_date = {
y : today.getFullYear(),
m : today.getMonth() + 1,
d : today.getDate()
}

// 计算今天0点的时间戳(是一个数字,秒数)
var stamp_today = Date.parse(return_date.y + '-' + ( return_date.m < 10 ? '0' + return_date.m : return_date.m ) + '-' + ( return_date.d < 10 ? '0' + return_date.d : return_date.d ) + 'T00:00:00.000Z');

// 分别计算出今天24点,今天0点(昨天24点),昨天0点(前天24点),前天0点
var stamp = [];
stamp[0] = stamp_today + 86400000; // 今天24:00
stamp[1] = stamp_today; // 今天0:00,昨天24:00
stamp[2] = stamp_today - 86400000; // 昨天0:00,前天24:00
stamp[3] = stamp_today - 172800000; // 前天0:00

// 将需要比较的时间戳字符串转化为js日期时间对象,并且获取需要用到的参数
o = time.replace('T',' ').replace('Z','').replace('-','/').replace('-','/').substring(0,19);
var std = new Date(o);

format_o = {
y : std.getFullYear(),
m : std.getMonth() + 1,
d : std.getDate(),
t : ( std.getHours() < 10 ? '0'+std.getHours() : std.getHours() ) + ':' +  ( std.getMinutes() < 10 ? '0'+std.getMinutes() : std.getMinutes() )
};

// 将需要比较的时间戳字符串转化为时间戳(秒数)
var stamp_o = Date.parse(format_o.y + '-' + ( format_o.m < 10 ? '0' + format_o.m : format_o.m ) + '-' + ( format_o.d < 10 ? '0' + format_o.d : format_o.d ) + 'T' + format_o.t + ':00.000Z' );

var time1;

// 比较需要计算的日期的秒数和今天24点,今天0点(昨天24点),昨天0点(前天24点),前天0点之间的关系,

// 秒数落在今天24点,今天0点(昨天24点)即为今天
if(stamp_o >= stamp[1] && stamp_o < stamp[0]){
time1 = '今天';

// 秒数落在今天0点(昨天24点),昨天0点(前天24点)即为昨天
}else if(stamp_o >= stamp[2] && stamp_o < stamp[1]){
time1 = '昨天';

// 秒数落在昨天0点(前天24点),前天0点即为前天
}else if(stamp_o >= stamp[3] && stamp_o < stamp[2]){
time1 = '前天';

}else{
// 其它情况,如果为统一年份,那么是 XX月XX日
if(return_date.y == format_o.y){
time1 = ( format_o.m < 10 ? '0' + format_o.m : format_o.m ) + '月' + ( format_o.d < 10 ? '0' + format_o.d : format_o.d ) + '日';

// 不同年份,那么是 XXXX年XX月XX日
}else{
time1 = format_o.y + '年' + ( format_o.m < 10 ? '0' + format_o.m : format_o.m ) + '月' + ( format_o.d < 10 ? '0' + format_o.d : format_o.d ) + '日';
}
}

// 根据返回类型,判断是否要加上小时和分钟
if(return_type == 1){
time1 = time1 + ' ' + format_o.t;
}

return time1;
}
}

window.onload = function(){
// 想要查看不同日期时间输出的效果,请改变下面这个变量的值,注意格式
var test_time = '2015-08-05T19:00:00.000Z';

document.write('获取用户浏览器和0时区的时差:' + time.get_time_zone() + '<br><br>');

document.write('0时区时间戳转换为用户浏览器时区的时间戳:' + time.format_time(test_time,0,1) + '<br>');
document.write('用户浏览器时区的时间戳转换为0时区时间戳:' + time.format_time(test_time,1,1) + '<br><br>');

document.write('0时区时间戳转换为用户浏览器时区的时间:' + time.format_time(test_time,0,0) + '<br>');
document.write('用户浏览器时区的时间戳转换为0时区时间:' + time.format_time(test_time,1,0) + '<br><br>');

document.write('计算今天、昨天、前天:' + time.format_date(test_time,0) + '<br>');
document.write('计算今天、昨天、前天包括时间:' + time.format_date(test_time,1) + '<br><br>');

document.write('根据0时区时间戳,计算浏览器时区的今天、昨天、前天:' + time.format_date(time.format_time(test_time,0,0),0) + '<br>');
document.write('根据0时区时间戳,计算浏览器时区的今天、昨天、前天包括时间:' + time.format_date(time.format_time(test_time,0,0),1) + '<br><br>');
}
</script>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: