时区时间戳前端转换
// 使用方法 $.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; };