1- calc ( "sec" , getSec ) ;
2- calc ( "min" , getMin ) ;
3- var intSec = setInterval ( 'calc("sec", getSec)' , 1000 ) ;
4- var intMin ;
1+ var intSec , intMin , intHour , intDay ;
2+ var deadline = new Date ( 2013 , 11 , 26 , 23 , 21 , 00 , 00 ) ;
53
6- function calc ( type , func ) {
4+ var calc = function ( type , func ) {
75 $ ( '.counter.' + type + ' .to' )
86 . addClass ( 'hide' )
97 . removeClass ( 'to' )
@@ -25,38 +23,158 @@ function calc(type, func) {
2523}
2624
2725
28- function getSec ( next ) {
29- var d = new Date ( ) ;
30- var sec = 60 - d . getSeconds ( ) ;
26+ var getSec = function ( next ) {
27+ var today = new Date ( ) ;
28+ var sec = secsUntil ( today , deadline ) ;
3129
32- if ( next ) {
33- sec -- ;
34- if ( sec < 0 ) {
35- sec = 59 ;
36- }
37- } else if ( sec == 60 ) {
38- sec = 0 ;
39- if ( intMin == undefined ) {
40- calc ( "min" , getMin ) ;
41- intMin = setInterval ( 'calc("min", getMin)' , 60000 ) ;
42- }
30+ if ( ! next ) {
31+ sec ++ ;
4332 }
4433
34+ if ( sec === 60 ) {
35+ sec = 0 ;
36+ } else if ( sec === 61 ) {
37+ sec = 1 ;
38+ }
39+
4540 return ( sec < 10 ? '0' + sec : sec ) ;
4641}
4742
48- function getMin ( next ) {
49- var d = new Date ( ) ;
50- var min = 60 - d . getMinutes ( ) ;
51- if ( next ) {
52- min -- ;
53- if ( min < 0 ) {
54- min = 59 ;
55- }
56- } else if ( min == 60 ) {
57- min = 0 ;
58- // calcMin();
43+ var getMin = function ( next ) {
44+ var today = new Date ( ) ;
45+ var min = minsUntil ( today , deadline ) ;
46+
47+ if ( ! next ) {
48+ min ++ ;
5949 }
6050
51+ if ( min === 60 ) {
52+ min = 0 ;
53+ }
54+
6155 return ( min < 10 ? '0' + min : min ) ;
62- }
56+ }
57+
58+ var getHour = function ( next ) {
59+ var today = new Date ( ) ;
60+ var hour = hoursUntil ( today , deadline ) ;
61+
62+ if ( ! next ) {
63+ hour ++ ;
64+ }
65+
66+ if ( hour === 24 ) {
67+ hour = 0 ;
68+ } else if ( hour === 25 ) {
69+ hour = 1 ;
70+ }
71+
72+ return ( hour < 10 ? '0' + hour : hour ) ;
73+ }
74+
75+ var getDay = function ( next ) {
76+ var today = new Date ( ) ;
77+ var day = daysUntil ( today , deadline ) ;
78+
79+ if ( ! next ) {
80+ day ++ ;
81+ }
82+
83+ if ( day < 0 ) {
84+ day = 0 ;
85+ }
86+
87+ return ( day < 10 ? '0' + day : day ) ;
88+ }
89+
90+ // Days until Date2 from Date1
91+ var daysUntil = function ( date1 , date2 ) {
92+ // Convert both dates to milliseconds
93+ var msD1 = date1 . getTime ( ) ;
94+ var msD2 = date2 . getTime ( ) ;
95+
96+ // Calculate the difference in milliseconds
97+ var msDiff = msD2 - msD1 ;
98+
99+ // Convert back to days and return
100+ return ( msDiff >= 0 ) ? Math . floor ( msDiff / ( 24 * 3600 * 1000 ) ) : - 1 ;
101+ }
102+
103+ // Hours until Date2 from Date1
104+ var hoursUntil = function ( date1 , date2 ) {
105+ var hDiff = 0 ;
106+ var daysLeft = daysUntil ( date1 , date2 ) ;
107+
108+ if ( daysLeft !== - 1 ) {
109+ // Convert both dates to milliseconds
110+ var msD1 = date1 . getTime ( ) ;
111+ var msD2 = date2 . getTime ( ) ;
112+
113+ // Calculate the difference in milliseconds
114+ hDiff = Math . floor ( ( msD2 - msD1 ) / ( 3600 * 1000 ) ) - daysLeft * 24 ;
115+ }
116+
117+ return hDiff ;
118+ }
119+
120+ // Minutes until Date2 from Date1
121+ var minsUntil = function ( date1 , date2 ) {
122+ var mDiff = 0 ;
123+ var daysLeft = daysUntil ( date1 , date2 ) ;
124+ var hoursLeft = hoursUntil ( date1 , date2 ) ;
125+
126+ if ( daysLeft !== - 1 ) {
127+ // Convert both dates to milliseconds
128+ var msD1 = date1 . getTime ( ) ;
129+ var msD2 = date2 . getTime ( ) ;
130+
131+ mDiff = Math . floor ( ( msD2 - msD1 ) / ( 60 * 1000 ) ) - daysLeft * 24 * 60 - hoursLeft * 60 ;
132+ }
133+
134+ return mDiff ;
135+ }
136+
137+ // Seconds until Date2 from Date1
138+ var secsUntil = function ( date1 , date2 ) {
139+ var sDiff = 0 ;
140+ var daysLeft = daysUntil ( date1 , date2 ) ;
141+ var hoursLeft = hoursUntil ( date1 , date2 ) ;
142+ var minsLeft = minsUntil ( date1 , date2 ) ;
143+
144+ if ( daysUntil ( date1 , date2 ) !== - 1 ) {
145+ // Convert both dates to milliseconds
146+ var msD1 = date1 . getTime ( ) ;
147+ var msD2 = date2 . getTime ( ) ;
148+
149+ sDiff = Math . floor ( ( msD2 - msD1 ) / ( 1000 ) ) - daysLeft * 24 * 3600 - hoursLeft * 3600 - minsLeft * 60 ;
150+ }
151+
152+ return sDiff ;
153+ }
154+
155+ calc ( "sec" , getSec ) ;
156+ calc ( "min" , getMin ) ;
157+ calc ( "hour" , getHour ) ;
158+ calc ( "day" , getDay ) ;
159+ if ( parseInt ( getDay ( false ) ) !== - 1 ) {
160+ intSec = setInterval ( function ( ) {
161+ calc ( "sec" , getSec ) ;
162+
163+ if ( parseInt ( getSec ( false ) ) === 0 ) {
164+ calc ( "min" , getMin ) ;
165+
166+ if ( parseInt ( getMin ( false ) ) === 0 ) {
167+ calc ( "hour" , getHour ) ;
168+
169+ if ( parseInt ( getHour ( false ) ) === 0 ) {
170+ calc ( "day" , getDay ) ;
171+ }
172+ }
173+ }
174+ } , 1000 ) ;
175+ }
176+ var today = new Date ( ) ;
177+ console . log ( daysUntil ( today , deadline ) ) ;
178+ console . log ( hoursUntil ( today , deadline ) ) ;
179+ console . log ( minsUntil ( today , deadline ) ) ;
180+ console . log ( secsUntil ( today , deadline ) ) ;
0 commit comments