【连载】实用小demo连载 3 —— js 时间转换 demo 2015-08-06 16:10 1人阅读 评论(0) 收藏

小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>



版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-08-06 16:10  snow_finland  阅读(180)  评论(0编辑  收藏  举报