`

时区时间戳前端转换

 
阅读更多

 

 

时区时间戳前端转换

 

// 使用方法 $.formatDate("MM/dd/yyyy")  求当前时间an MM/dd/yyyy
// 举例
/**
 * @date类型为 Date()
 * 
 * @return <string>
 */
$.formatDate = function(pattern, date)
{
    // 如果不设置,默认为当前时间
    if (!date) date = new Date();
    if (typeof (date) === "string")
    {
        if (date == "") date = new Date();
        else
            date = new Date(date.replace(/-/g, "/"));
    }
    /* 补00 */
    var toFixedWidth = function(value)
    {
        var result = 100 + value;
        return result.toString().substring(1);
    };

    /* 配置 */
    var options =
    {
        regeExp : /(yyyy|M+|d+|h+|m+|s+|ee+|ws?|p)/g,
        months : [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ],
        // weeks : [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday',
        // 'Friday', 'Saturday' ]
        weeks : [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ]
    };

    /* 时间切换 */
    var swithHours = function(hours)
    {
        return hours < 12 ? "AM" : "PM";
    };

    /* 配置值 */
    var pattrnValue =
    {
        "yyyy" : date.getFullYear(), // 年份
        "MM" : toFixedWidth(date.getMonth() + 1), // 月份
        "dd" : toFixedWidth(date.getDate()), // 日期
        "hh" : toFixedWidth(date.getHours()), // 小时
        "mm" : toFixedWidth(date.getMinutes()), // 分钟
        "ss" : toFixedWidth(date.getSeconds()), // 秒
        "ee" : options.months[date.getMonth()], // 月份名称
        "ws" : options.weeks[date.getDay()], // 星期名称
        "M" : date.getMonth() + 1,
        "d" : date.getDate(),
        "h" : date.getHours(),
        "m" : date.getMinutes(),
        "s" : date.getSeconds(),
        "p" : swithHours(date.getHours())
    };

    return pattern.replace(options.regeExp, function()
    {
        return pattrnValue[arguments[0]];
    });
};

/**
 * 时间转成时间戳
 * 
 * @param <string>
 *            2014-01-01 20:20:20 日期格式
 * @return <int> 时间戳(秒) JS默认为毫秒,统一处理为秒
 */
$.dateToTimestamp = function(date)
{
    date = $.formatDate('yyyy-MM-dd', date);

    if (typeof (date) == 'number')
    {
        date = new String(date);
    }

    date = $.formatDate('yyyy-MM-dd', date);

    var f = date.split(' ', 2);
    var d = (f[0] ? f[0] : '').split('-', 3);
    var t = (f[1] ? f[1] : '').split(':', 3);
    var timestamp = (new Date(parseInt(d[0], 10) || null, (parseInt(d[1], 10) || 1) - 1, parseInt(d[2], 10) || null, parseInt(t[0], 10) || null, parseInt(t[1],
            10)
            || null, parseInt(t[2], 10) || null)).getTime() / 1000;

    if (timestamp < 0) timestamp = 0; // 配合MYSQL FROM_UNIXTIME函数, 当 timestamp<
    // 0时,FROM_UNIXTIME返回NULL,实际时间应为
    // 1970-1-1
    return timestamp;
};

/**
 * 时间戳转成时间
 * 
 * @param <number>
 *            number类型
 * 
 * @return <string>
 */
$.timestampToDate = function(timestampNumber)
{
    if (typeof (timestampNumber) == 'string')
    {
        timestampNumber = parseInt(timestampNumber);
    }

    timestampNumber *= 1000;
    var timestamp = new Date(timestampNumber);
    // var commonTime = timestamp.toLocaleString();
    // return commonTime.replace(/年|月/g, "-").replace(/日/g, " ");
    var commonTime = timestamp.toString();
    return commonTime;
};

/**
 * 时间戳转成指定格式的时间
 * 
 * @param <number>
 *            number类型
 * 
 * @return <string>
 */
$.timestampToPatternDate = function(pattern, timestampNumber)
{
    return $.formatDate(pattern, new Date($.timestampToDate(timestampNumber)));
};

/**
 * 服务器时间戳 转成 指定格式的 本地时间
 * 
 * @param <number>
 *            number类型
 * 
 * @return <string>
 */
$.serverTimestampToPatternLocaleDate = function(pattern, timestampNumber)
{
    // timestampNumber += new Date().getTimezoneOffset() * 60 + $.timeZone * 60
    // * 60;
    // timestampNumber += $.timeZone * 60 * 60 - (-1 * (new
    // Date().getTimezoneOffset() * 60) );

	var daylightOffset = 0 ;
	//表示国外才操作,转换夏令时
    if($.serverTimeZone == -7){
    	//表示这个时间为标记
        var dateMark = $.dateToTimestamp("2015-3-8");   
        dateMark = $.changeTimestamp(dateMark, $.localTimeZone(), $.serverTimeZone);
        if(timestampNumber < dateMark){
        	daylightOffset = -1;
        }
    }
    //转换夏令时 end
    
	
    timestampNumber = $.changeTimestamp(timestampNumber, $.serverTimeZone + daylightOffset, $.localTimeZone());
    
    return $.timestampToPatternDate(pattern, timestampNumber);
};

/**
 * 本地时间 转成 服务器时间戳
 * 
 * @param <string>
 *            2014-01-01 20:20:20 日期格式
 * @return <int> 时间戳(秒) JS默认为毫秒,统一处理为秒
 */
$.localeDateToServerTimestamp = function(date)
{
    var timestampNumber = $.dateToTimestamp(date);
    
  
    //
    
    // timestampNumber -= new Date().getTimezoneOffset() * 60 + $.timeZone * 60
    // * 60;
    // timestampNumber += (-1 * (new Date().getTimezoneOffset() * 60)) -
    // $.timeZone * 60 * 60 ;
    /**
     * 
     * date < 2015-3-8 , 
     */    
    timestampNumber = $.changeTimestamp(timestampNumber, $.localTimeZone(), $.serverTimeZone);
    
    //表示国外才操作,转换夏令时
    if($.serverTimeZone == -7){
    	//表示这个时间为标记
        var dateMark = $.dateToTimestamp("2015-3-9");   
        dateMark = $.changeTimestamp(dateMark, $.localTimeZone(), $.serverTimeZone);
        if(timestampNumber < dateMark){
        	timestampNumber = $.changeTimestamp( $.dateToTimestamp(date), $.localTimeZone(), $.serverTimeZone - 1);//-8时区
        }
    }
    //转换夏令时 end
    
    return timestampNumber;
};

/**
 * 服务器时间 转成 指定格式的 本地时间
 * 
 * @param <date>
 *            date类型
 * 
 * @return <date>
 */
$.serverDateToPatternLocaleDate = function(pattern, date)
{
    var timestampNumber = date.getTime() / 1000;
    //timestampNumber = $.changeTimestamp(timestampNumber, $.serverTimeZone, $.localTimeZone());
    
	var daylightOffset = 0 ;
	//表示国外才操作,转换夏令时
    if($.serverTimeZone == -7){
    	//表示这个时间为标记
        var dateMark = $.dateToTimestamp("2015-3-8");   
        dateMark = $.changeTimestamp(dateMark, $.localTimeZone(), $.serverTimeZone);
        if(timestampNumber < dateMark){
        	daylightOffset = -1;
        }
    }
    //转换夏令时 end
    
	
    timestampNumber = $.changeTimestamp(timestampNumber, $.serverTimeZone + daylightOffset, $.localTimeZone());
    
    return $.timestampToPatternDate(pattern, timestampNumber);
};

/***
 * 时长转成 long data
 */
$.serverDateToPatternLocaleTimestamp = function(date)
{
    var timestampNumber = date.getTime() / 1000;
    //timestampNumber = $.changeTimestamp(timestampNumber, $.serverTimeZone, $.localTimeZone());
    
	var daylightOffset = 0 ;
	//表示国外才操作,转换夏令时
    if($.serverTimeZone == -7){
    	//表示这个时间为标记
        var dateMark = $.dateToTimestamp("2015-3-8");   
        dateMark = $.changeTimestamp(dateMark, $.localTimeZone(), $.serverTimeZone);
        if(timestampNumber < dateMark){
        	daylightOffset = -1;
        }
    }
    //转换夏令时 end
    timestampNumber = $.changeTimestamp(timestampNumber, $.serverTimeZone + daylightOffset, $.localTimeZone());
    
    return timestampNumber * 1000;
};

/**
 * 指定时间 的 上一周
 * 
 * @param <date>
 *            date类型
 * 
 * @return <date>
 */
$.lastWeekDate = function(date)
{
    var timestampNumber = date.getTime() - 7 * 24 * 60 * 60 * 1000;
    return new Date(timestampNumber);
};



/**
 * 指定时间 的 下一周
 * 
 * @param <date>
 *            date类型
 * 
 * @return <date>
 */
$.nextWeekDate = function(date)
{
    var timestampNumber = date.getTime() + 7 * 24 * 60 * 60 * 1000;
    return new Date(timestampNumber);
};


/**
 * 指定时间 的 前一天
 * 
 * @param <date>
 *            date类型
 * 
 * @return <date>
 */
$.lastDate = function(date)
{
    var timestampNumber = date.getTime() - 24 * 60 * 60 * 1000;
    return new Date(timestampNumber);
};

$.finalTimestamp = function(timestampNumber)
{
    return timestampNumber + 24 * 60 * 60 - 1;
};

/**
 * 指定时间 的 后一天
 * 
 * @param <date>
 *            date类型
 * 
 * @return <date>
 */
$.nextDate = function(date)
{
    var timestampNumber = date.getTime() + 24 * 60 * 60 * 1000;
    return new Date(timestampNumber);
};

$.changeTimestamp = function(timestampNumber, sourceTimeZone, destTimeZone)
{
    return timestampNumber + (sourceTimeZone - destTimeZone) * 60 * 60;
};

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics