2009-04-23 9 views
7

क्या जावास्क्रिप्ट में कुछ भी आसानी से उपलब्ध है (यानी "प्लगइन्स" के माध्यम से नहीं) जो मुझे setTimeout जैसा कुछ करने की अनुमति देता है, लेकिन यह कहने के बजाय कि कितने मिलीसेकंड कुछ होना चाहिए, मैं इसे एक तिथि देता हूं ऑब्जेक्ट कह रहा है कि कुछ कब करना है?सेटटाइमआउट लेकिन किसी दिए गए समय के लिए

setToHappen(function() { 
    alert('Wake up!'); 
}, new Date("...")); 

और हाँ, मैं जानता हूँ कि मैं सिर्फ अपने मौजूदा तिथि वस्तु के साथ new Date() घटाकर मिलीसेकेंड की राशि प्राप्त करने के लिए (या शायद यह दूसरी तरह के आसपास है) ऐसा कर सकते हैं, लेकिन मैं अभी भी जानना चाहते हैं।

उत्तर

17

आपको अभी और आपके दिनांक ऑब्जेक्ट के बीच मिलीसेकंड की संख्या मिलनी होगी।

function setToHappen(fn, d){ 
    var t = d.getTime() - (new Date()).getTime(); 
    return setTimeout(fn, t); 
} 
+1

क्या आपको मिलीसेकंड प्राप्त करने के लिए 1000 से गुणा करना नहीं है? –

+1

@Pim, नहीं, आप नहीं करते हैं। 'getTime()' 00:00:00 1/1/1970 और इसी दिनांक वस्तु के बीच मिलीसेकंड की संख्या देता है। – James

+0

एएच ठीक है, मैंने सोचा कि यह सेकंड में था। –

6

नहीं, लेकिन आप आसानी से अपना स्वयं का कार्य लिख सकते हैं। बस मिलिसेकंड में अब और दिए गए पल के बीच की दुविधा की गणना करें और उसके साथ सेटटाइम कॉल करें।

कुछ इस तरह:

setToHappen = function(fn, date){ 
    var now = new Date().getTime(); 
    var diff = date.getTime() - now; 
    return setTimeout(fn, diff); 
} 

संपादित करें: धन्यवाद क्रिस उनका कहना है कि बाहर के लिए 1000 से अतिरिक्त गुणा निकाल लिया है!

+0

यह गलत है, getTime पहले ही मिलीसेकंड लौटाता है। – Chris

+0

आपका स्वागत है! फिक्सिंग के लिए धन्यवाद। – Chris

3

के बाद से लोगों को date वस्तुओं का उपयोग कर समय समाप्ति के अंतराल की गणना के बारे में बात कर रहे हैं, यह ध्यान दिया जाना चाहिए कि, फ़ायरफ़ॉक्स में, अधिकतम मूल्य setTimeout() अंतराल पैरामीटर के लिए स्वीकार करेंगे 2147483647 (2^31 - 1) के रूप में PRIntervalTime एक हस्ताक्षरित 32-बिट पूर्णांक है। यह 25 दिनों से कम समय तक आता है।

संबंधित मुद्दे