leftTime.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. (function ($, app) {
  2. Date.prototype.format = function (format) {
  3. var o = {
  4. "M+": this.getMonth() + 1, //month
  5. "d+": this.getDate(), //day
  6. "h+": this.getHours(), //hour
  7. "m+": this.getMinutes(), //minute
  8. "s+": this.getSeconds(), //second
  9. "q+": Math.floor((this.getMonth() + 3) / 3), //quarter
  10. "S": this.getMilliseconds() //millisecond
  11. }
  12. if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  13. (this.getFullYear() + "").substr(4 - RegExp.$1.length));
  14. for (var k in o)
  15. if (new RegExp("(" + k + ")").test(format))
  16. format = format.replace(RegExp.$1,
  17. RegExp.$1.length == 1 ? o[k] :
  18. ("00" + o[k]).substr(("" + o[k]).length));
  19. return format;
  20. };
  21. app.leftTime = function (setdate, callback, isCheckTime) {
  22. var timer = this.timer;
  23. if (!isCheckTime && isCheckTime != false) {
  24. isCheckTime = true;
  25. }
  26. ;
  27. var opts = {};
  28. opts.count = 0;
  29. //定义变量 d,h,m,s保存倒计时的时间
  30. var d = 0,
  31. h = 0,
  32. m = 0,
  33. s = 0,
  34. setCount = 0,
  35. setCount2 = 0,
  36. stepCheck = 0,
  37. status = false;
  38. if (typeof (setdate) === "object") {
  39. if (!setdate.init && setdate.init != true) {
  40. setdate.init = false;
  41. }
  42. ;
  43. var countTime = 0,
  44. newDateTime,
  45. setDayNo = 0;
  46. if (setdate.setday != 0 || setdate.setday != "0") {
  47. setDayNo = parseInt(setdate.setday) * 86400000;
  48. }
  49. if (!setdate.nowdate || setdate.nowdate == null || setdate.nowdate == undefined || setdate.nowdate == "undefined") {
  50. setdate.nowdate = new Date().getTime();
  51. newDateTime = new Date();
  52. } else {
  53. countTime = (new Date().getTime()) - parseInt(setdate.nowdate);
  54. newDateTime = new Date(setdate.nowdate);
  55. }
  56. var newSeverDateTime = new Date(parseInt(setdate.nowdate) + setDayNo);
  57. var severStart = 0, severEnd = 0;
  58. if ((setdate.startdate != 0 && setdate.startdate != "0") && !setdate.init) {
  59. if (typeof (setdate.startdate) === "string") {
  60. if (checkDateTime(setdate.startdate)) {
  61. severStart = new Date((setdate.startdate).replace(/-/g, "/")).getTime();
  62. } else {
  63. if (checkIsTime(setdate.startdate)) {
  64. severStart = new Date(newSeverDateTime.format("yyyy/MM/dd") + " " + setdate.startdate).getTime();
  65. }
  66. }
  67. ;
  68. } else if (typeof (setdate.startdate) === "number") {
  69. severStart = setdate.startdate;
  70. }
  71. }
  72. if (setdate.enddate != 0 || setdate.enddate != "0") {
  73. if (typeof (setdate.enddate) === "string") {
  74. if (checkDateTime(setdate.enddate)) {
  75. severEnd = new Date((setdate.enddate).replace(/-/g, "/")).getTime();
  76. } else {
  77. if (checkIsTime(setdate.enddate)) {
  78. severEnd = new Date(newSeverDateTime.format("yyyy/MM/dd") + " " + setdate.enddate).getTime();
  79. }
  80. }
  81. ;
  82. } else if (typeof (setdate.enddate) === "number") {
  83. severStart = setdate.enddate;
  84. }
  85. }
  86. ;
  87. var currDateTime = newDateTime.getTime();
  88. }
  89. ;
  90. function checkDateTime(str) {
  91. if (str.indexOf("-") != -1 || str.indexOf("/") != -1) {
  92. return true;
  93. } else {
  94. return false;
  95. }
  96. }
  97. function checkIsTime(str) {
  98. var reg = /^(20|21|22|23|[0-1]\d):[0-5]\d$/;
  99. if (reg.test($.trim(str))) {
  100. return true;
  101. } else {
  102. return false;
  103. }
  104. }
  105. function checkTime(i) {
  106. if (i < 10) {
  107. if (isCheckTime) {
  108. i = "0" + i;
  109. }
  110. }
  111. return i;
  112. }
  113. function leftTimeExeFn() {
  114. if (typeof (setdate) === "string" || typeof (setdate) === "number") {
  115. //获取当前时间
  116. var startDate = new Date();
  117. var nowTime = startDate.getTime();
  118. //设置截止时间
  119. var endTime = 0;
  120. var leftTimeCount = 0;
  121. if (typeof (setdate) === "string" || setdate.toString().length >= 12) {
  122. setdate = typeof (setdate) === "string" && checkDateTime(setdate) == true ? setdate.replace(/-/g, "/") : setdate;
  123. var endDate = new Date(setdate);
  124. endTime = endDate.getTime();
  125. leftTimeCount = endTime - nowTime;
  126. } else {
  127. endTime = setdate - opts.count;
  128. leftTimeCount = endTime * 1000;
  129. opts.count++;
  130. }
  131. if (leftTimeCount > 0) {
  132. d = Math.floor(leftTimeCount / 1000 / 60 / 60 / 24);
  133. h = Math.floor(leftTimeCount / 1000 / 60 / 60 % 24);
  134. m = Math.floor(leftTimeCount / 1000 / 60 % 60);
  135. s = Math.floor(leftTimeCount / 1000 % 60);
  136. status = true;
  137. } else {
  138. window.clearInterval(timer);
  139. d = 0;
  140. h = 0;
  141. m = 0;
  142. s = 0;
  143. status = false;
  144. }
  145. } else if (typeof (setdate) === "object") {
  146. var nowTime = new Date().getTime() + (countTime > 0 ? countTime * -1 : Math.abs(countTime));
  147. var endTime = 0;
  148. if (currDateTime < severStart) {
  149. endTime = severStart;
  150. stepCheck = 1;
  151. } else if (currDateTime >= severStart && currDateTime < severEnd) {
  152. endTime = severEnd;
  153. stepCheck = 2;
  154. } else if (currDateTime >= severEnd) {
  155. stepCheck = 3;
  156. }
  157. //时间差
  158. var countEnd = endTime - nowTime;
  159. if (countEnd > 0) {
  160. d = Math.floor(countEnd / 1000 / 60 / 60 / 24);
  161. h = Math.floor(countEnd / 1000 / 60 / 60 % 24);
  162. m = Math.floor(countEnd / 1000 / 60 % 60);
  163. s = Math.floor(countEnd / 1000 % 60);
  164. status = true;
  165. } else {
  166. window.clearInterval(timer);
  167. d = 0;
  168. h = 0;
  169. m = 0;
  170. s = 0;
  171. status = false;
  172. }
  173. }
  174. var dataTime = {
  175. "d": checkTime(d),
  176. "h": checkTime(h),
  177. "m": checkTime(m),
  178. "s": checkTime(s)
  179. };
  180. dataTime.status = status;
  181. dataTime.step = stepCheck;
  182. if (callback && typeof (callback) === "function") {
  183. return callback(dataTime);
  184. }
  185. }
  186. leftTimeExeFn();
  187. timer = setInterval(leftTimeExeFn, 1000);
  188. if (timer != "undefined" || timer != null || timer != undefined) {
  189. return timer;
  190. }
  191. };
  192. $.extend(app);
  193. })(jQuery || zepto, {});