format.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /**
  2. * js日期格式化,timestamp支持10位或13位的时间戳,或是时间字符串
  3. * @param {string} format - 传进来的字符串,Y-m-d H:i:s 每个字母所代表的意思详见代码
  4. * @param {int string} timestamp - 要格式化的时间 默认为当前时间 可以是日期形式的字符串,可以是10位或13位的时间戳
  5. * @return {string} 格式化的时间字符串
  6. *
  7. * dateFormat(Y-m-d H:i:s )
  8. */
  9. export const dateFormat = (format, timestamp) => {
  10. if (timestamp == "" || timestamp == null || format == "") timestamp = new Date().getTime();
  11. //如果传进来的是 日期的字符串形式,变回时间戳
  12. if (typeof(timestamp) == "string" && timestamp.indexOf("-") != -1) {
  13. //兼容ios
  14. var timestamp = timestamp.replace("T", " ")
  15. // if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  16. timestamp = timestamp.replace(/\-/g, "/");
  17. // }
  18. if (timestamp.indexOf("-") !== false || timestamp.indexOf("/") !== false) timestamp = new Date(timestamp).getTime()
  19. }
  20. //如果传进来的是10位的时间戳 变成13位的
  21. if (timestamp.toString().length == 10) timestamp = timestamp * 1000
  22. //如果到这一步,依然不是13位的时间戳,说明数据有问题
  23. timestamp = parseInt(timestamp)
  24. if (timestamp.toString().length != 13) return ""
  25. var a, jsdate = new Date(timestamp);
  26. var pad = function(n, c) {
  27. if ((n = n + "").length < c) {
  28. return new Array(++c - n.length).join("0") + n;
  29. } else {
  30. return n;
  31. }
  32. };
  33. var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
  34. var txt_weekdaysZH = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
  35. var txt_ordin = {
  36. 1: "st",
  37. 2: "nd",
  38. 3: "rd",
  39. 21: "st",
  40. 22: "nd",
  41. 23: "rd",
  42. 31: "st"
  43. };
  44. var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
  45. var f = {
  46. // Day
  47. d: function() {
  48. return pad(f.j(), 2)
  49. }, //2位天, 02
  50. D: function() {
  51. return f.l().substr(0, 3)
  52. }, //星期单词的前三位
  53. j: function() {
  54. return jsdate.getDate()
  55. }, //天 2
  56. l: function() {
  57. return txt_weekdays[f.w()]
  58. }, //星期英文
  59. Z: function() {
  60. return txt_weekdaysZH[f.w()]
  61. }, //星期中文
  62. N: function() {
  63. return f.w() + 1
  64. }, //星期的某一天的数字 星期日为1
  65. S: function() {
  66. return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
  67. },
  68. w: function() {
  69. return jsdate.getDay()
  70. }, //星期的某一天的数字 星期日为0
  71. z: function() {
  72. return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0
  73. }, //当前时间是一年中的第几天
  74. // Month
  75. F: function() {
  76. return txt_months[f.n()]
  77. }, //月份英文
  78. m: function() {
  79. return pad(f.n(), 2)
  80. }, //2位月 02
  81. M: function() {
  82. return f.F().substr(0, 3)
  83. }, //月份英文前三个字母
  84. n: function() {
  85. return jsdate.getMonth() + 1
  86. }, //月 2
  87. t: function() { //当前月总共有多少天
  88. var n;
  89. if ((n = jsdate.getMonth() + 1) == 2) {
  90. return 28 + f.L();
  91. } else {
  92. if (n & 1 && n < 8 || !(n & 1) && n > 7) {
  93. return 31;
  94. } else {
  95. return 30;
  96. }
  97. }
  98. },
  99. // Year
  100. L: function() {
  101. var y = f.Y();
  102. return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0
  103. },
  104. //年
  105. Y: function() {
  106. return jsdate.getFullYear()
  107. },
  108. y: function() {
  109. return (jsdate.getFullYear() + "").slice(2)
  110. },
  111. // Time
  112. a: function() {
  113. return getHours(jsdate) > 11 ? "pm" : "am"
  114. },
  115. A: function() {
  116. return f.a().toUpperCase()
  117. },
  118. B: function() {
  119. // peter paul koch:
  120. var off = (jsdate.getTimezoneOffset() + 60) * 60;
  121. var theSeconds = (getHours(jsdate) * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
  122. var beat = Math.floor(theSeconds / 86.4);
  123. if (beat > 1000) beat -= 1000;
  124. if (beat < 0) beat += 1000;
  125. if ((String(beat)).length == 1) beat = "00" + beat;
  126. if ((String(beat)).length == 2) beat = "0" + beat;
  127. return beat;
  128. },
  129. g: function() {
  130. return getHours(jsdate) % 12 || 12
  131. },
  132. G: function() {
  133. return getHours(jsdate)
  134. },
  135. h: function() {
  136. return pad(f.g(), 2)
  137. },
  138. H: function() {
  139. return pad(getHours(jsdate), 2)
  140. },
  141. i: function() {
  142. return pad(jsdate.getMinutes(), 2)
  143. },
  144. s: function() {
  145. return pad(jsdate.getSeconds(), 2)
  146. },
  147. //u not supported yet
  148. // Timezone
  149. //e not supported yet
  150. //I not supported yet
  151. O: function() {
  152. var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
  153. if (jsdate.getTimezoneOffset() > 0) t = "-" + t;
  154. else t = "+" + t;
  155. return t;
  156. },
  157. P: function() {
  158. var O = f.O();
  159. return (O.substr(0, 3) + ":" + O.substr(3, 2))
  160. },
  161. //T not supported yet
  162. //Z not supported yet
  163. // Full Date/Time
  164. c: function() {
  165. return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()
  166. },
  167. //r not supported yet
  168. U: function() {
  169. return Math.round(jsdate.getTime() / 1000)
  170. }
  171. };
  172. //兼容ios
  173. function getHours(dateObj) {
  174. //因为上边已经将UTC的时间进行了转换,把T去了,所以这里用同样的方法即可
  175. return dateObj.getHours();
  176. if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  177. return dateObj.getUTCHours();
  178. } else {
  179. return dateObj.getHours();
  180. }
  181. }
  182. var ret = ""
  183. return format.replace(/[\\]?([a-zA-Z])/g, function(t, s) {
  184. if (t != s) {
  185. // escaped
  186. ret = s;
  187. } else if (f[s]) {
  188. // a date function exists
  189. ret = f[s]();
  190. } else {
  191. // nothing special
  192. ret = s;
  193. }
  194. return ret;
  195. });
  196. }