123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- const DAY = 24;
- const MINUTES = 60;
- const SECONDS = 60;
- const TIME_OF_AREA = 8 * MINUTES * SECONDS;
- const TIME_OF_DAY = DAY * MINUTES * SECONDS;
- const TIME_OF_HOUR = MINUTES * SECONDS;
- let TimeUtils = {
- _deltaTime: undefined,
- _shicha: undefined,
- _tmpCheckTime: undefined,
- /**
- * 获取本时区和北京时区的时间差
- *
- */
- GetTimeDiff () {
- if (!G.FuncUtils.isNumber(this._shicha)) {
- let offset = new Date().getTimezoneOffset() * 60;
- this._shicha = 28800 - offset;
- }
- return this._shicha;
- },
- /**
- * 同步时间
- *
- * @param {number} currentTime
- */
- synTime (currentTime) {
- if (typeof(currentTime) != 'number' || currentTime < 10000) {
- return;
- }
- let myDate = new Date();
- let osTime = Math.round(myDate.getTime() / 1000);
- this._deltaTime = osTime - currentTime;
- },
- /**
- * 获取当前时间
- *
- * @returns {number}
- */
- getCurrentTime () {
- let myDate = new Date();
- let osTime = Math.round(myDate.getTime() / 1000);
- let deltaTime = this._deltaTime;
- let ret = osTime - deltaTime;
- return ret;
- },
- /**
- * 初始化检查跨天的时间
- *
- */
- initCheckIsSameDay () {
- this._tmpCheckTime = this.getCurrentTime();
- },
- /**
- * 判断是否跨天
- *
- * @returns {boolean}
- */
- isAcrossDay () {
- let ret = false;
- let currentTime = this.getCurrentTime();
- if (typeof(this._tmpCheckTime) == 'number') {
- ret = this.isSameDay(currentTime - 5, this._tmpCheckTime);
- }
- this._tmpCheckTime = currentTime;
- return ret;
- },
- /**
- * 判断两个时间是否同一天
- *
- * @param {number} time1
- * @param {number} time2
- * @returns {boolean}
- */
- isSameDay (time1, time2) {
- let day1 = this.getDay(time1);
- let day2 = this.getDay(time2);
- return (day1 == day2);
- },
- /**
- * 获取天数
- *
- * @param {number} time 秒
- * @returns {number}
- */
- getDay (time) {
- let day = Math.floor((time + TIME_OF_AREA) / TIME_OF_DAY);
- return day;
- },
- /**
- * 获取当前时间的天数
- *
- * @returns {number}
- */
- getToday () {
- let currentTime = this.getCurrentTime();
- let day = this.getDay(currentTime);
- return day;
- },
- /**
- * 判断是否是今天
- *
- * @param {number} time
- * @returns {boolean}
- */
- isToday (time) {
- let ret = false;
- if (typeof(time) == 'number') {
- let day = this.getDay(time);
- let today = this.getToday();
- if (today === day) {
- ret = true;
- }
- }
- return ret;
- },
- /**
- * 获取日期天数差
- * EX: time2如果是当前时间,表示距离今天的天数,小于0表示今天之前,大于0表示今天之后
- * EX: time1如果是当前时间,表示距离今天的天数,大于0表示今天之前,小于0表示今天之后
- *
- * @param {number} time1
- * @param {number} time2
- * @returns {boolean}
- */
- getDeltaDay (time1, time2) {
- let day1 = this.getDay(time1);
- let day2 = this.getDay(time2);
- let ret = day1 - day2;
- return ret;
- },
- /**
- * 根据时分秒获取时间秒数
- *
- * @param {number} h
- * @param {number} m
- * @param {number} s
- * @returns {number}
- */
- getTime (h, m, s) {
- let time = 0;
- if (typeof(h) == 'number') {
- time = time + h * TIME_OF_HOUR;
- }
- if (typeof(m) == 'number') {
- time = time + h * MINUTES;
- }
- if (typeof(s) == 'number') {
- time = time + s;
- }
- return time;
- },
- /**
- * 获取当前时间以后的某个时间的秒数
- *
- * @param {number} h
- * @param {number} m
- * @param {number} s
- * @returns {number}
- */
- getTimeWithCurrentTimeAndDeltaTime (h, m, s) {
- let currentTime = this.getCurrentTime();
- let ret = this.getTimeWithTimeAndDeltaTime(currentTime, h, m, s);
- return ret;
- },
- /**
- * 获取某个时刻以后的某个时间的秒数
- *
- * @param {number} time
- * @param {number} h
- * @param {number} m
- * @param {number} s
- * @returns {number}
- */
- getTimeWithTimeAndDeltaTime (time, h, m, s) {
- let overTime = this.getTime(h, m, s);
- let ret = time + overTime;
- return ret;
- },
- /**
- * 获取当天0点以后的某个时间的秒数
- *
- * @param {number} h
- * @param {number} m
- * @param {number} s
- * @returns {number}
- */
- getTimeWithCurrentDayTimeAndDeltaTime (h, m, s) {
- let curTime = this.getCurrentTime();
- let ret = this.getTimeWithDayTimeAndDeltaTime(curTime, h, m, s);
- return ret;
- },
- /**
- * 获取某个时刻的那天0点以后的某个时间的秒数
- *
- * @param {number} time
- * @param {number} h
- * @param {number} m
- * @param {number} s
- * @returns {number}
- */
- getTimeWithDayTimeAndDeltaTime (time, h, m, s) {
- let day = this.getDay(time);
- let dayTime = day * TIME_OF_DAY;
- let overTime = this.getTime(h, m, s);
- let ret = dayTime + overTime;
- return ret;
- },
- /**
- * 获取一天过去时间
- *
- * @param {number} time
- * @returns {number}
- */
- getOneDayPastTime (time) {
- let today = new Date(time * 1000);
- today.setHours(0);
- today.setMinutes(0);
- today.setSeconds(0);
- let zeroTime = Math.round(today.getTime() / 1000);
- let pastTime = time - zeroTime;
- return pastTime;
- },
- /**
- * @description 获取带时区的时间戳
- * @author Wetion
- * @date 2019-06-24
- * @param {Number} timestamp 需要加时区的时间戳
- * @param {Number} timezone 时区
- * @returns
- */
- getTimeZone (timestamp, timezone) {
- let offsetGMT = new Date().getTimezoneOffset();
- return new Date(timestamp * 1000 + offsetGMT * 60 * 1000 + timezone * 60 * 60 * 1000);
- },
- /**
- * @description 获取倒计时文本
- * @author Wetion
- * @date 2019-06-24
- * @param {Number} startTimestamp 开始时间戳
- * @param {Number} endTimestamp 结束时间戳
- * @param {Number} fmt 格式化
- * @returns {String}
- */
- getCountdownText (startTimestamp, endTimestamp, fmt) {
- let timestamp1 = this.getTimeZone(startTimestamp, 8); // 开始时间
- let timestamp2 = this.getTimeZone(endTimestamp, 8); // 结束时间
- let t = timestamp2.getTime() - timestamp1.getTime(); // 时间差的毫秒数
- if (t < 0) {
- return ''; // 时差小于等于0时返回空字符
- }
- let d = 0, h = 0, m = 0, s = 0;
- d = Math.floor(t / 1000 / 3600 / 24);
- h = Math.floor(t / 1000 / 60 / 60 % 24);
- m = Math.floor(t / 1000 / 60 % 60);
- s = Math.floor(t / 1000 % 60);
- fmt = fmt || '%s';
- let ret = '';
- if (d > 0) {
- if (d === 1 && h === 0) {
- ret = '24小时' + m + '分';
- } else {
- if (d > 1 && h == 0) {
- d -= 1;
- h = 24;
- }
- ret = d + '天' + h + '小时';
- }
- } else if (h > 0) {
- if (h === 1 && m === 0) {
- ret = '60分';
- } else {
- if (h > 1 && m === 0) {
- h -= 1;
- m = 60;
- }
- ret = h + '小时' + m + '分';
- }
- } else if (m > 0) {
- if (m === 1 && s === 0) {
- ret = '60秒';
- } else {
- if (m > 1 && s === 0) {
- m -= 1;
- s = 60;
- }
- ret = m + '分' + s + '秒';
- }
- } else {
- ret += s + '秒';
- }
- return cc.js.formatStr(fmt, ret);
- },
- getGetZeroTomorrow () {
- let currentTime = this.getCurrentTime();
- let currentDate = new Date(currentTime * 1000).toLocaleDateString();
- return new Date(currentDate).getTime() / 1000 + 24 * 60 * 60;
- },
- /**
- * @description 日期转时间戳(秒)
- * @author Wetion
- * @date 2019-06-19
- * @param {String} dateStr 日期(date 支持的格式)
- * @returns
- */
- dateToTimestamp (dateStr) {
- return new Date(dateStr).getTime() / 1000;
- },
- /**
- * 通过时间戳格式化日期
- *
- * @author Wetion
- * @date 2019-03-22
- * @param {Number} timestamp 时间戳 (秒)
- * @param {String} fmt 例如(默认值):'%yyyy年%MM月%dd日%HH时%mm分%ss秒'
- * @returns {String} 格式串
- */
- formatToDate (timestamp, fmt) {
- let date = this.getTimeZone(timestamp, 8); // 结束时间,需传入时间参数
- fmt = fmt || '%yyyy年%MM月%dd日%HH时%mm分%ss秒';
- fmt = fmt.replace(/%yyyy/g, date.getFullYear());
- fmt = fmt.replace(/%MM/g, G.FuncUtils.prefixInteger(date.getMonth() + 1, 2)); // 月份从0开始,所以加1
- fmt = fmt.replace(/%dd/g, G.FuncUtils.prefixInteger(date.getDate(), 2));
- fmt = fmt.replace(/%HH/g, G.FuncUtils.prefixInteger(date.getHours(), 2));
- fmt = fmt.replace(/%mm/g, G.FuncUtils.prefixInteger(date.getMinutes(), 2));
- fmt = fmt.replace(/%ss/g, G.FuncUtils.prefixInteger(date.getSeconds(), 2));
- return fmt;
- },
- getZeroClockTimestamp (dayFromTimestapDay, timestamp) {
- let currTime = timestamp;
- if (!currTime) {
- currTime = this.getCurrentTime();
- }
- let todayPassTime = this.getOneDayPastTime(currTime);
- return currTime - todayPassTime + dayFromTimestapDay * TIME_OF_DAY;
- },
- // 今天某个时刻时间戳 hour 0~24
- getTodayHourTimestamp (hour) {
- let zeroTimestamp = this.getZeroClockTimestamp(0);
- return zeroTimestamp + hour * TIME_OF_HOUR;
- }
- };
- module.exports = TimeUtils;
|