123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196 |
- /**
- * js日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串
- * @param {string} format - 传进来的字符串,Y-m-d H:i:s 每个字母所代表的意思详见代码
- * @param {int string} timestamp - 要格式化的时间 默认为当前时间 可以是日期形式的字符串,可以是10位或13位的时间戳
- * @return {string} 格式化的时间字符串
- *
- * dateFormat(Y-m-d H:i:s )
- */
- export const dateFormat = (format, timestamp) => {
- if (timestamp == "" || timestamp == null || format == "") timestamp = new Date().getTime();
- //如果传进来的是 日期的字符串形式,变回时间戳
- if (typeof(timestamp) == "string" && timestamp.indexOf("-") != -1) {
- //兼容ios
- var timestamp = timestamp.replace("T", " ")
- // if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
- timestamp = timestamp.replace(/\-/g, "/");
- // }
- if (timestamp.indexOf("-") !== false || timestamp.indexOf("/") !== false) timestamp = new Date(timestamp).getTime()
- }
- //如果传进来的是10位的时间戳 变成13位的
- if (timestamp.toString().length == 10) timestamp = timestamp * 1000
- //如果到这一步,依然不是13位的时间戳,说明数据有问题
- timestamp = parseInt(timestamp)
- if (timestamp.toString().length != 13) return ""
- var a, jsdate = new Date(timestamp);
- var pad = function(n, c) {
- if ((n = n + "").length < c) {
- return new Array(++c - n.length).join("0") + n;
- } else {
- return n;
- }
- };
- var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
- var txt_weekdaysZH = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
- var txt_ordin = {
- 1: "st",
- 2: "nd",
- 3: "rd",
- 21: "st",
- 22: "nd",
- 23: "rd",
- 31: "st"
- };
- var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
- var f = {
- // Day
- d: function() {
- return pad(f.j(), 2)
- }, //2位天, 02
- D: function() {
- return f.l().substr(0, 3)
- }, //星期单词的前三位
- j: function() {
- return jsdate.getDate()
- }, //天 2
- l: function() {
- return txt_weekdays[f.w()]
- }, //星期英文
- Z: function() {
- return txt_weekdaysZH[f.w()]
- }, //星期中文
- N: function() {
- return f.w() + 1
- }, //星期的某一天的数字 星期日为1
- S: function() {
- return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
- },
- w: function() {
- return jsdate.getDay()
- }, //星期的某一天的数字 星期日为0
- z: function() {
- return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0
- }, //当前时间是一年中的第几天
- // Month
- F: function() {
- return txt_months[f.n()]
- }, //月份英文
- m: function() {
- return pad(f.n(), 2)
- }, //2位月 02
- M: function() {
- return f.F().substr(0, 3)
- }, //月份英文前三个字母
- n: function() {
- return jsdate.getMonth() + 1
- }, //月 2
- t: function() { //当前月总共有多少天
- var n;
- if ((n = jsdate.getMonth() + 1) == 2) {
- return 28 + f.L();
- } else {
- if (n & 1 && n < 8 || !(n & 1) && n > 7) {
- return 31;
- } else {
- return 30;
- }
- }
- },
- // Year
- L: function() {
- var y = f.Y();
- return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
- },
- //年
- Y: function() {
- return jsdate.getFullYear()
- },
- y: function() {
- return (jsdate.getFullYear() + "").slice(2)
- },
- // Time
- a: function() {
- return getHours(jsdate) > 11 ? "pm" : "am"
- },
- A: function() {
- return f.a().toUpperCase()
- },
- B: function() {
- // peter paul koch:
- var off = (jsdate.getTimezoneOffset() + 60) * 60;
- var theSeconds = (getHours(jsdate) * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
- var beat = Math.floor(theSeconds / 86.4);
- if (beat > 1000) beat -= 1000;
- if (beat < 0) beat += 1000;
- if ((String(beat)).length == 1) beat = "00" + beat;
- if ((String(beat)).length == 2) beat = "0" + beat;
- return beat;
- },
- g: function() {
- return getHours(jsdate) % 12 || 12
- },
- G: function() {
- return getHours(jsdate)
- },
- h: function() {
- return pad(f.g(), 2)
- },
- H: function() {
- return pad(getHours(jsdate), 2)
- },
- i: function() {
- return pad(jsdate.getMinutes(), 2)
- },
- s: function() {
- return pad(jsdate.getSeconds(), 2)
- },
- //u not supported yet
- // Timezone
- //e not supported yet
- //I not supported yet
- O: function() {
- var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
- if (jsdate.getTimezoneOffset() > 0) t = "-" + t;
- else t = "+" + t;
- return t;
- },
- P: function() {
- var O = f.O();
- return (O.substr(0, 3) + ":" + O.substr(3, 2))
- },
- //T not supported yet
- //Z not supported yet
- // Full Date/Time
- c: function() {
- return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()
- },
- //r not supported yet
- U: function() {
- return Math.round(jsdate.getTime() / 1000)
- }
- };
- //兼容ios
- function getHours(dateObj) {
- //因为上边已经将UTC的时间进行了转换,把T去了,所以这里用同样的方法即可
- return dateObj.getHours();
- if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
- return dateObj.getUTCHours();
- } else {
- return dateObj.getHours();
- }
- }
- var ret = ""
- return format.replace(/[\\]?([a-zA-Z])/g, function(t, s) {
- if (t != s) {
- // escaped
- ret = s;
- } else if (f[s]) {
- // a date function exists
- ret = f[s]();
- } else {
- // nothing special
- ret = s;
- }
- return ret;
- });
- }
|