• JS 片段剪贴


    避免登录页被框架嵌套成子页

    if (window != top) {
        top.location.href = location.href;
    }
    

    参数覆盖

    /*	
     * 对象参数配置
     * @param userOption  {Object} 用户参数对象
     * @param defaultOption  {Object} 默认参数对象
     * @return {Object} 参数对象
     */
    function paramsExtend(userOption, defaultOption) {
    	if (!userOption) return defaultOption;
    	for (var key in defaultOption) {
    		if (userOption[key] == null) {
    			userOption[key] = defaultOption[key];
    		} else if (typeof userOption[key] === 'object') {
    			paramsExtend(userOption[key], defaultOption[key]);
    		}
    	}
    	return userOption;
    }
    

    日期

    /**
     *对Date的扩展,将 Date 转化为指定格式的String
     *月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符,
     *年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
     *例子:
     *(new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
     *(new Date()).Format("yyyy-M-d h:m:s.S")      ==> 2006-7-2 8:9:4.18
     */
    Date.prototype.format = function (fmt) {
    	var o = {
    		"M+": this.getMonth() + 1, //月份
    		"d+": this.getDate(), //日
    		"h+": this.getHours(), //小时
    		"m+": this.getMinutes(), //分
    		"s+": this.getSeconds(), //秒
    		"q+": Math.floor((this.getMonth() + 3) / 3), //季度
    		"S": this.getMilliseconds() //毫秒
    	};
    	if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
    	for (var k in o)
    		if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
    	return fmt;
    }
    
    /**
     * 获取上一个月或下一个月日期
     * @date 日期
     * @type 上prev | 下next
     */
    function getPreOrAfterDate(date, type) {
    	date = new Date(date);
    	var year = date.getFullYear(), //获取当前日期的年份  
    		month = date.getMonth(), //获取当前日期的月份index
    		day = date.getDate(); //获取当前日期的日
    	var days = new Date(year, month + 1, 0);  
    	days = days.getDate(); //获取当前日期中月的天数  
    	var newYear = year, newMonthIndex = 0;
    	//月
    	if(type == "prev"){
    		newMonthIndex = parseInt(month) - 1;
    		if(newMonthIndex < 0){
    			newYear = parseInt(newYear) - 1;
    			newMonthIndex = 11;
    		}
    	}else if(type == "next"){
    		newMonthIndex = parseInt(month) + 1;
    		if(newMonthIndex > 11){
    			newYear = parseInt(newYear) + 1;
    			newMonthIndex = 0;
    		}
    	}
    	//日
    	var newDay = day;
    	var	newDate = new Date(newYear, newMonthIndex+1, 0);
    	newDays = newDate.getDate();
    	if(type == "prev"){
    		if(newDay > newDays){
    			newDay = newDays;
    		}
    	}else if(type == "next"){
    		newDay = newDays;
    	}
    	return new Date(newYear, newMonthIndex, newDay);
    }
    
    /**
     * 获取上一个月或下一个月日期
     * @date 格式为yyyy-mm-dd的日期
     * @type 上prev | 下after
     */
    function getPreOrAfterDate(date, type) {
    	var arr = date.split('-');
    	var year = arr[0], //获取当前日期的年份
    		month = arr[1], //获取当前日期的月份
    		day = arr[2]; //获取当前日期的日
    	var days = new Date(year, month, 0);
    	days = days.getDate(); //获取当前日期中月的天数
    	var step = 1, type = type || 'after';
    	var year2 = year,
    		month2 = parseInt(month);
    	if(type == 'prev'){
    		month2 = month2 - step;
    	}else if(type == 'after'){
    		month2 = month2 + step;
    	}
    	if (month2 == 0) {//如果是1月份,则取上一年的12月份
    		year2 = parseInt(year2) - 1;
    		month2 = 12;
    	}else if (month2 == 13) {
    		year2 = parseInt(year2) + 1;
    		month2 = 1;
    	}
    	var day2 = day,
    		days2 = new Date(year2, month2, 0);
    	days2 = days2.getDate();
    	if (day2 > days2) {//如果原来日期大于上一月的日期,则取当月的最大日期。比如3月的30日,在2月中没有30
    		day2 = days2;
    	}
    	if (month2 < 10) {
    		month2 = '0' + month2;//月份填补成2位。
    	}
    	var res = year2 + '-' + month2 + '-' + day2;
    	return res;
    }
    
    function getFullDate(date) {
    	//返回 YYYY年MM月DD日
    	var year = month = day = ' ';
    	if (isNaN(date) && !isNaN(Date.parse(date))) {
    		var newDate = new Date(date);
    		year = newDate.getFullYear();
    		month = newDate.getMonth() + 1;
    		day = newDate.getDate();
    		month = month < 10 ? '0' + month : month;
    		day = day < 10 ? '0' + day : day;
    	}
    	return year + '年' + month + '月' + day + '日';
    }
    

    金额

    function getUpperDigit(n) {
    	//数字转大写
    	var fraction = ['角', '分'];
    	var digit = [
    		'零', '壹', '贰', '叁', '肆',
    		'伍', '陆', '柒', '捌', '玖'
    	];
    	var unit = [
    		['元', '万', '亿'],
    		['', '拾', '佰', '仟']
    	];
    	var head = n < 0 ? '欠' : '';
    	n = Math.abs(n);
    	var s = '';
    	for (var i = 0; i < fraction.length; i++) {
    		s += (digit[Math.floor(n * 10 * Math.pow(10, i)) % 10] + fraction[i]).replace(/零./, '');
    	}
    	s = s || '整';
    	n = Math.floor(n);
    	for (var i = 0; i < unit[0].length && n > 0; i++) {
    		var p = '';
    		for (var j = 0; j < unit[1].length && n > 0; j++) {
    			p = digit[n % 10] + unit[1][j] + p;
    			n = Math.floor(n / 10);
    		}
    		s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
    	}
    	return head + s.replace(/(零.)*零元/, '元').replace(/(零.)+/g, '零').replace(/^整$/, '零元整');
    }
    
  • 相关阅读:
    线程安全的signals
    排序
    TCMalloc : ThreadCaching Malloc
    C++箴言:争取异常安全的代码
    windows 内存泄露debug的相关函数
    分析几个驱动
    CAsyncSocket对象不能跨线程之分析 (转载)
    优化理论
    标 题: C++0x把Concept去掉了
    几个流行的http 服务器开源软件
  • 原文地址:https://www.cnblogs.com/KevinTseng/p/12039693.html
Copyright © 2020-2023  润新知