209 lines
6.4 KiB
TypeScript
209 lines
6.4 KiB
TypeScript
class TimeUtils {
|
||
/**
|
||
* 计算月份ID
|
||
* @param d 指定计算日期
|
||
* @returns 月ID
|
||
*/
|
||
public static monthId(d: Date = null): number {
|
||
d = d ? d : new Date();
|
||
let y = d.getFullYear();
|
||
let m = d.getMonth() + 1;
|
||
let g = m < 10 ? "0" : "";
|
||
return parseInt(y + g + m);
|
||
}
|
||
|
||
/**
|
||
* 计算日期ID
|
||
* @param d 指定计算日期
|
||
* @returns 日期ID
|
||
*/
|
||
public static dateId(t: Date = null): number {
|
||
t = t ? t : new Date();
|
||
let m: number = t.getMonth() + 1;
|
||
let a = m < 10 ? "0" : "";
|
||
let d: number = t.getDate();
|
||
let b = d < 10 ? "0" : "";
|
||
return parseInt(t.getFullYear() + a + m + b + d);
|
||
}
|
||
|
||
/**
|
||
* 计算周ID
|
||
* @param d 指定计算日期
|
||
* @returns 周ID
|
||
*/
|
||
public static weekId(d: Date = null, first: boolean = true): number {
|
||
d = d ? d : new Date();
|
||
let c: Date = new Date();
|
||
c.setTime(d.getTime());
|
||
c.setDate(1); c.setMonth(0);//当年第一天
|
||
|
||
let year: number = c.getFullYear();
|
||
let firstDay: number = c.getDay();
|
||
if (firstDay == 0) {
|
||
firstDay = 7;
|
||
}
|
||
let max: boolean = false;
|
||
if (firstDay <= 4) {
|
||
max = firstDay > 1;
|
||
c.setDate(c.getDate() - (firstDay - 1));
|
||
} else {
|
||
c.setDate(c.getDate() + 7 - firstDay + 1);
|
||
}
|
||
let num: number = this.diffDay(d, c, false);
|
||
if (num < 0) {
|
||
c.setDate(1); c.setMonth(0);//当年第一天
|
||
c.setDate(c.getDate() - 1);
|
||
return this.weekId(c, false);
|
||
}
|
||
let week: number = num / 7;
|
||
let weekIdx: number = Math.floor(week) + 1;
|
||
if (weekIdx == 53) {
|
||
c.setTime(d.getTime());
|
||
c.setDate(c.getDate() - 1);
|
||
let endDay: number = c.getDay();
|
||
if (endDay == 0) {
|
||
endDay = 7;
|
||
}
|
||
if (first && (!max || endDay < 4)) {
|
||
c.setFullYear(c.getFullYear() + 1);
|
||
c.setDate(1); c.setMonth(0);//当年第一天
|
||
return this.weekId(c, false);
|
||
}
|
||
}
|
||
let g: string = weekIdx > 9 ? "" : "0";
|
||
let s: string = year + "00" + g + weekIdx;//加上00防止和月份ID冲突
|
||
return parseInt(s);
|
||
}
|
||
|
||
/**
|
||
* 计算俩日期时间差,如果a比b小,返回负数
|
||
*/
|
||
public static diffDay(a: Date, b: Date, fixOne: boolean = false): number {
|
||
let x = (a.getTime() - b.getTime()) / 86400000;
|
||
return fixOne ? Math.ceil(x) : Math.floor(x);
|
||
}
|
||
|
||
/**
|
||
* 获取本周一 凌晨时间
|
||
*/
|
||
public static getFirstDayOfWeek(d?: Date): Date {
|
||
d = d ? d : new Date();
|
||
let day = d.getDay() || 7;
|
||
return new Date(d.getFullYear(), d.getMonth(), d.getDate() + 1 - day, 0, 0, 0, 0);
|
||
}
|
||
|
||
/**
|
||
* 获取当日凌晨时间
|
||
*/
|
||
public static getFirstOfDay(d?: Date): Date {
|
||
d = d ? d : new Date();
|
||
d.setHours(0, 0, 0, 0);
|
||
return d;
|
||
}
|
||
|
||
/**
|
||
* 获取次日凌晨时间
|
||
*/
|
||
public static getNextFirstOfDay(d?: Date): Date {
|
||
return new Date(this.getFirstOfDay(d).getTime() + 86400000);
|
||
}
|
||
|
||
/**
|
||
* @returns 2018-12-12
|
||
*/
|
||
public static formatDate(date: Date): string {
|
||
let y = date.getFullYear();
|
||
let m: any = date.getMonth() + 1;
|
||
m = m < 10 ? '0' + m : m;
|
||
let d: any = date.getDate();
|
||
d = d < 10 ? ('0' + d) : d;
|
||
return y + '-' + m + '-' + d;
|
||
}
|
||
|
||
/**
|
||
* @returns 2018-12-12 12:12:12
|
||
*/
|
||
public static formatDateTime(date: Date): string {
|
||
let y = date.getFullYear();
|
||
let m: any = date.getMonth() + 1;
|
||
m = m < 10 ? ('0' + m) : m;
|
||
let d: any = date.getDate();
|
||
d = d < 10 ? ('0' + d) : d;
|
||
let h = date.getHours();
|
||
let i: any = date.getMinutes();
|
||
i = i < 10 ? ('0' + i) : i;
|
||
let s: any = date.getSeconds();
|
||
s = s < 10 ? ('0' + s) : s;
|
||
return y + '-' + m + '-' + d + ' ' + h + ':' + i + ":" + s;
|
||
}
|
||
|
||
/**
|
||
* @returns s 2018-12-12 或者 2018-12-12 12:12:12
|
||
*/
|
||
public static parseDate(s: string): Date {
|
||
let t = Date.parse(s);
|
||
if (!isNaN(t)) {
|
||
return new Date(Date.parse(s.replace(/-/g, "/")));
|
||
} else {
|
||
return new Date();
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 秒数转换为时间形式。
|
||
* @param time 秒数
|
||
* @param partition 分隔符
|
||
* @param showHour 是否显示小时
|
||
* @return 返回一个以分隔符分割的时, 分, 秒
|
||
*
|
||
* 比如: time = 4351; secondToTime(time)返回字符串01:12:31;
|
||
*/
|
||
public static secondToTime(time: number = 0, partition: string = ":", showHour: boolean = true): string {
|
||
let hours: number = Math.floor(time / 3600);
|
||
let minutes: number = Math.floor(time % 3600 / 60);
|
||
let seconds: number = Math.floor(time % 3600 % 60);
|
||
|
||
let h: string = hours.toString();
|
||
let m: string = minutes.toString();
|
||
let s: string = seconds.toString();
|
||
|
||
if (hours < 10) h = "0" + h;
|
||
if (minutes < 10) m = "0" + m;
|
||
if (seconds < 10) s = "0" + s;
|
||
|
||
let timeStr: string;
|
||
if (showHour)
|
||
timeStr = h + partition + m + partition + s;
|
||
else
|
||
timeStr = m + partition + s;
|
||
|
||
return timeStr;
|
||
}
|
||
|
||
|
||
/**
|
||
* 时间形式转换为毫秒数。
|
||
* @param time 以指定分隔符分割的时间字符串
|
||
* @param partition 分隔符
|
||
* @return 毫秒数显示的字符串
|
||
* @throws Error Exception
|
||
*
|
||
* 用法1 trace(MillisecondTransform.timeToMillisecond("00:60:00"))
|
||
* 输出 3600000
|
||
*
|
||
*
|
||
* 用法2 trace(MillisecondTransform.timeToMillisecond("00.60.00","."))
|
||
* 输出 3600000
|
||
*/
|
||
public static timeToMillisecond(time: string, partition: string = ":"): string {
|
||
let _ary: any[] = time.split(partition);
|
||
let timeNum: number = 0;
|
||
let len: number = _ary.length;
|
||
for (let i: number = 0; i < len; i++) {
|
||
let n: number = <number>_ary[i];
|
||
timeNum += n * Math.pow(60, (len - 1 - i));
|
||
}
|
||
timeNum *= 1000;
|
||
return timeNum.toString();
|
||
}
|
||
} |