आधी रात को जावास्क्रिप्ट डेट को इनिशियलाइज़ करने का सबसे अच्छा तरीका क्या है?


439

नई तिथि का उदाहरण प्राप्त करने का सबसे सरल तरीका क्या है (लेकिन आधी रात को समय निर्धारित करें?

जवाबों:


874

setHoursविधि वैकल्पिक ले जा सकते हैं minutes, secondsऔर msतर्क, उदाहरण के लिए:

var d = new Date();
d.setHours(0,0,0,0);

यह आपके वर्तमान समय-क्षेत्र00:00:00.000 का समय निर्धारित करेगा , यदि आप UTC समय में काम करना चाहते हैं, तो आप विधि का उपयोग कर सकते हैं ।setUTCHours


41
FYI करें, मैं इस विधि (d.setHours (0,0,0,0)) को 270K पंक्तियों पर कम फ़ंक्शन में चला रहा हूं, और यह d.setHours (0) करने की तुलना में 20 सेकंड से अधिक तेज़ी से कर रहा है; d.setMinutes (0); d.setSeconds (0); शानदार जवाब @CMS!
jbnunn

32
यह दिनांक ऑब्जेक्ट के रूप में d रखने के लिए दो लाइनों में किया जाना चाहिए। मैंने हाल ही में एक बग तय किया है जो इसे एक पंक्ति में करता है: var d = new Date ()। setHours (0, 0, 0, 0)। हालाँकि, d तब एक संख्या थी, न कि एक तिथि जब से setHours एक संख्या लौटाता है।
जेसन

9
मैं अभी इस पर आया हूं (जिस पार्टी को मैं जानता हूं, उसके अंत में), डेट को वापस करने के लिए एक लाइन समाधान की भी आवश्यकता है। किसी को भी इस की तलाश में, @ ज़ोन का जवाब पूरी तरह से काम करता है new Date(new Date().setHours(0,0,0,0)):।
14

226

बस यह स्पष्ट करना चाहता था कि स्वीकृत उत्तर से स्निपेट निकटतम आधी रात को अतीत में देता है :

var d = new Date();
d.setHours(0,0,0,0); // last midnight

यदि आप भविष्य में निकटतम मध्यरात्रि प्राप्त करना चाहते हैं , तो निम्न कोड का उपयोग करें:

var d = new Date();
d.setHours(24,0,0,0); // next midnight

6
अगर आज 25 घंटे लंबा होता है (घड़ियों को डेलाइट सेविंग के लिए आगे एडजस्ट किया जाता है) तो क्या होता है?
क्यूंम

8
इस ग्राहक साइड स्क्रिप्ट, आधी रात, आधी रात है डेलाइट सेविंग के बावजूद .. इसके अलावा उल्लेखनीय उल्लेख .. दुनिया में हर जगह डीएसटी (डेलाइट सेविंग टाइम) का उपयोग करता है
क्रिस

2
@qntm: दिन की बचत का समय परिवर्तन हमेशा 2 am-4am पर लागू किया जाता है, ताकि उस दिन के दौरान यह केवल एक आधी रात हो। :) लेकिन हाँ, दिन में दो बार (फेसपल्म) 3 बार हो सकता है
डैन

@ क्रिस नहीं, मेरा मतलब दूसरी झलकी से है। "आज आधी रात के बाद 24 घंटे" हमेशा "कल आधी रात" के समान नहीं होता है। इन मामलों में, दूसरा स्निपेट काम करता है?
क्यूंम

3
@qntm: Date.setHours आँख बंद करके 24 घंटे नहीं जोड़ता है, यह अधिक बुद्धिमान है। इसके बजाय, यह पल का टाइमस्टैम्प लौटाता है, जब घड़ी अगली बार 24 दिखाएगा। समय की बचत को ध्यान में रखते हुए। कंसोल में खुद खेलने की कोशिश करें। दिलचस्प है, सेटहॉर्स (25) कल दोपहर 1 बजे
डैन

68

ऑब्जेक्ट के लिए एक-लाइनर कॉन्फ़िगर करता है:

new Date(new Date().setHours(0,0,0,0));

एक तत्व बनाते समय:

dateFieldConfig = {
      name: "mydate",
      value: new Date(new Date().setHours(0, 0, 0, 0)),
}

6
धन्यवाद! मैं सोच रहा था कि मैं इसे एक ही लाइन में कैसे कर सकता हूं क्योंकि मैं एक ऑब्जेक्ट प्रॉपर्टी सेट कर रहा था! बहुत बढ़िया जवाब।
पाउलो रॉबर्टो रोजा

धन्यवाद ज़ोन, इससे मुझे एक पंक्ति लिखने में मदद मिली।
HungrySoul

22

बस इसे यहां जोड़ने जा रहा हूं क्योंकि मैं इस पृष्ठ पर उतरा हूं जो इस क्षण को करने की तलाश में हूंजेएस और अन्य भी कर सकते हैं।

[देश: शब्द "पल" पहले से ही इस पृष्ठ पर कहीं और दिखाई देता है इसलिए खोज इंजन यहां प्रत्यक्ष रूप से दिखाई देते हैं, और क्षण.js वारंट के लिए पर्याप्त रूप से कवर किया जा रहा है कि यह कितनी बार अन्य तिथि-संबंधित SO प्रश्नों में उल्लिखित है]

तो, 2.0.0 और इसके बाद के संस्करण में:

date.startOf('day');

पिछले संस्करणों के लिए:

date.sod();

डॉक्स:

http://momentjs.com/docs/#/manipulating/start-of/


दिनांक ऑब्जेक्ट वापस पाने के लिए, इसका उपयोग करेंmoment(DATE_OBJECT).startOf('day').toDate();
xinthose

2
याय, आपको एक 52kb जावास्क्रिप्ट लाइब्रेरी जोड़ने की सुविधा देता है, जिसे आप 2 लाइनों में कर सकते हैं।
ब्रूस लिम

19
और क्या होगा अगर आप पहले से ही कई अच्छे कारणों में से एक के लिए क्षण का उपयोग कर रहे हैं। व्यंग्यात्मक टिप्पणी जोड़ने से पहले मैंने जो तर्क दिया है, उसे पढ़ने के बारे में कैसे?
आयुषीत

11

आप शायद उपयोग कर सकते हैं

new Date().setUTCHours(0,0,0,0)

यदि आपको केवल एक बार मूल्य की आवश्यकता है।


1
यह किसी दिनांक का उदाहरण नहीं देता है, जैसा कि ओपी आवश्यक है।
कोबर्बॉय

यह पूरी तरह से सर्वोत्तम उत्तर है, लेकिन किसी दिनांक की आवृत्ति को वापस करने के लिए थोड़े से संपादन की आवश्यकता होती है। नई तिथि (नई तिथि) (। सेटआउट्स (0, 0, 0, 0));
वीटीएफएल

4

@ दान के उदाहरण में उपयोगिता जोड़ते हुए, मुझे अगले दिन या आधी रात को खोजने की आवश्यकता थी।

var d = new Date();
if(d.getHours() < 12) {
   d.setHours(12,0,0,0); // next midnight/midday is midday
} else {
   d.setHours(24,0,0,0); // next midnight/midday is midnight
}

इसने मुझे एक घटना के लिए एक आवृत्ति टोपी सेट करने की अनुमति दी, केवल इसे सुबह में एक बार और दोपहर में एक बार मेरी साइट पर किसी भी आगंतुक के लिए होने दिया। पकड़ी गई तिथि का उपयोग कुकी की समाप्ति निर्धारित करने के लिए किया गया था।


4

अगर गर्मियों की तारीखों की गणना करें तो अक्सर आधी रात (CEST) से 1 घंटा अधिक या एक घंटा कम होगा। जब तारीखें वापस आती हैं तो यह 1 दिन का अंतर होता है। इसलिए तिथियों को निकटतम मध्यरात्रि के लिए चक्कर लगाना पड़ता है। तो कोड होगा (जैसमीन के लिए):

    var d = new Date();
    if(d.getHours() < 12) {
    d.setHours(0,0,0,0); // previous midnight day
    } else {
    d.setHours(24,0,0,0); // next midnight day
    }

3

मैंने अपने लिए इसे संभालने के लिए एक युगल प्रोटोटाइप बनाया है।

// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
    if (!this.prototype[name]) {
        this.prototype[name] = func;
        return this;
    }
};

Date.method('endOfDay', function () {
    var date = new Date(this);
    date.setHours(23, 59, 59, 999);
    return date;
});

Date.method('startOfDay', function () {
    var date = new Date(this);
    date.setHours(0, 0, 0, 0);
    return date;
});

यदि आप सुरक्षित जांच नहीं चाहते हैं, तो आप बस उपयोग कर सकते हैं

Date.prototype.startOfDay = function(){
  /*Method body here*/
};

उदाहरण उपयोग:

var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());

2

यदि आपके पास पहले से ही अपने प्रोजेक्ट में एक निर्भरता के रूप में d3.js हैं, या इसे लाने में कोई आपत्ति नहीं है, तो d3-time ( d3.js लाइब्रेरी v4.0.0 के रूप में मॉड्यूलर है ) को अंतराल मिला है ।

"डिफ़ॉल्ट" मानों को सेट करते समय वे उपयोगी साबित हो सकते हैं, जैसे कि आधी रात, 0.00 सेकंड, महीने का पहला, आदि।

var d = new Date(); // Wed Aug 02 2017 15:01:07 GMT+0200 (CEST)
d3.timeHour(d) // Wed Aug 02 2017 00:00:00 GMT+0200 (CEST)
d3.timeMonth(d) // Tue Aug 01 2017 00:00:00 GMT+0200 (CEST)

इसलिए मैंने एसओ पर पोस्ट किए गए जावास्क्रिप्ट संबंधित प्रश्नों में एक प्रवृत्ति पर ध्यान दिया है: कोई फर्क नहीं पड़ता कि समाधानों की जटिलता देशी जेएस का उपयोग करके सामने रखी गई है, किसी बाहरी पुस्तकालय की मदद से इस मुद्दे को संबोधित करने वाले किसी भी उत्तर को अनिवार्य रूप से किसी समय कम हो जाएगा। इसे महसूस करते हुए, मैंने त्वरित प्रस्तावना के साथ अपना उत्तर पोस्ट करने का ध्यान रखा: यदि आपके पास पहले से ही उदाहरण हैंएक निर्भरता के रूप में । और अभी भी नीचे की ओर, अनाम SO उपयोगकर्ता? यह दर्द होता है, आदमी: '- (
पेमेस्टर

मैं गिर गया कि इस उत्तर को विशेष रूप से मतदान के बाद से नीचे नहीं जाना चाहिए क्योंकि एक प्रस्ताव का उपयोग होता है। जेएस के पास 16 वोट हैं (इस टिप्पणी को लिखने के समय)। यह समस्या को बहुत संक्षिप्त रूप में हल करता है न कि स्पष्ट तरीके से।
lukeatdesignworks
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.