कल जावास्क्रिप्ट में तारीख की गणना करें


279

मैं जावास्क्रिप्ट में एक तारीख के रूप में कल की गणना कैसे कर सकता हूं ?

जवाबों:


458
var date = new Date();

date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)

date.setDate(date.getDate() - 1);

date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)

12
अच्छा लगा। पहली नज़र में, ऐसा लग सकता है कि यह getDateमहीने के दिन (जैसे: 1 - 31) के रिटर्न के रूप में विफल होगा, लेकिन वास्तव setDate(0)में पिछले महीने के अंतिम दिन की तारीख निर्धारित करता है। हालांकि यह सभी ब्राउज़रों में काम करता है?
ड्रू नॉक्स

1
"सभी" ब्राउज़रों को सत्यापित नहीं किया जा सका, लेकिन मैंने सभी परीक्षण किए। camo.githubusercontent.com/…
जेम्स क्यूर्बज़

1
@Zargold का मतलब समझ में नहीं आता है। नोड --version v9.4.0 नोड कांस्ट डेट = नई तिथि () अपरिभाषित> दिनांक। .toISOString () '2018-02-09T16: 26: 30.821Z'
जेम्स कियबर्ज़

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

91

बहुत कुशल नहीं, लेकिन ऑनलाइनर के रूप में:

var yesterday = new Date(new Date().setDate(new Date().getDate()-1));

उपरोक्त तीन Dateऑब्जेक्ट बनाता है जो अनावश्यक रूप से बेकार है। यह एक ही पल के लिए कम किया जा सकता है:

var yesterday = (function(){this.setDate(this.getDate()-1); return this})
                  .call(new Date)

या, यदि आप पसंद करते हैं:

var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)

या, यदि आप तीर फ़ंक्शन के साथ ES6 पसंद करते हैं:

let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);

6
मैं गुंजाइश के साथ खिलवाड़ से बचना पसंद करूंगा:var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
रॉय टिंकर

4
यदि आपको एक-लाइनर की आवश्यकता है, तो नई तिथि (दिनांक.now) (जैसे - 24 * 60 * 60 * 1000) का उपयोग करें; इसमें केवल एक दिनांक ऑब्जेक्ट बनाने का लाभ है। लेकिन ईमानदारी से, जो कोई भी इस कोड को बनाए रखता है, वह स्पष्ट 2-लाइन संस्करण को देखने से ज्यादा खुश होगा, क्योंकि वे उस चीज़ के लिए (या मिलीसेकंड के आसपास) कुछ फ़ंक्शन फेंक देंगे।
रोब व्हेलन


60

सबसे आसान पार ब्राउज़र समाधान के लिए कोई जवाब नहीं है

कल ठीक उसी समय को खोजने के लिए:

var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000

अगर आप निर्भरता से मुक्त होना चाहते हैं, अन्यथा मैं http://momentjs.com का उपयोग करने की सलाह दूंगा


7
दिन के उजाले में बचत होने पर यह कैसे काम करता है? क्या यह एक घंटे के आगे / पीछे नहीं टकराएगा?
एडम तेगेन

19

प्रश्न को सामान्य बनाने और अन्य भिन्न गणनाओं का उपयोग करने के लिए:

var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);

यह एक पूर्णांक के रूप में "अब" के मूल्य के आधार पर एक नई तिथि ऑब्जेक्ट बनाता है जो एक दिन घटाकर मिलीसेकंड में यूनिक्स युग का प्रतिनिधित्व करता है।

दो दिन पहले:

var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);

एक घंटा पहले:

var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);

यह सबसे सुरक्षित तरीका लगता है क्योंकि हम मिलीसेकंड के संदर्भ में व्यक्त यूनिक्स युग पर काम कर रहे हैं। तो अंकगणित getDate () - 1 जैसा कुछ करने से ज्यादा सुरक्षित है। मैंने getDate () - 1 की कोशिश नहीं की है, लेकिन getDate () के दस्तावेज़ीकरण के आधार पर, यह 1 वापस आएगा अगर आज की तारीख किसी भी महीने की 1 है। और 1-1 = 0 वैध तिथि नहीं है। निश्चित नहीं है कि कैसे सेटडेट (0) काम करेगा।
कपिल पेंडसे

1
यह मेरा दृष्टिकोण था, हालांकि आप इसे थोड़ा सरल कर सकते हैं - कुछ नया करने की कोशिश करें (Date.now () - 24 * 60 * 60 * 1000);
रोब व्हेलन

setDate (0), btw, यह ठीक होगा - यह पिछले महीने के अंतिम दिन तक फ्लिप होगा। लेकिन यह मेरे लिए मिलिसेकॉन्ड प्रतिनिधित्व करने के लिए टिडियर (और अधिक सहज) लगता है, मेरे लिए - एक नकारात्मक पक्ष यह है कि "एक दिन में मिली की संख्या" स्पष्ट नहीं है, इसलिए उस गणना को गलत करना आसान हो सकता है।
रोब व्हेलन

यूनिक्स समय के साथ काम करना अधिक विश्वसनीय विकल्प की तरह लगता है। इसे उच्चतर दर्जा दिया जाना चाहिए।
पॉल

हाँ, मुझे यह तरीका सबसे अच्छा लगता है। कम अस्पष्टता है। मैंने साथ जाना समाप्त कर दिया new Date(Date.parse(new Date()) - 86400000)। हालाँकि मुझे Date.now पसंद है () इसलिए शायद मैं इसके बजाय कोशिश करूँगा। यह एक अतिरिक्त तारीख बचाएगा।
coblr

9

मैं पल पुस्तकालय का उपयोग करता हूं , यह बहुत लचीला और उपयोग में आसान है।

आपके मामले में:

let yesterday = moment().subtract(1, 'day').toDate();

2
subtractइसके बजाय आप बेहतर उपयोग करेंगेadd
थॉमस अय्यूब

ठीक भी काम करता है! फुल कैलेन्डर और उनके वैध के लिए अच्छी नौकरी
XenoX


7
//Create a date object using the current time
var now = new Date();

//Subtract one day from it
now.setDate(now.getDate()-1);

6

var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);


5

यह कल प्रातः 00:00 मिनट पर सटीकता के साथ उत्पन्न होगा

var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);

2
d.setHours(0,0,0,0);

चाल चलेगा


1
यह होगा? मैंने सोचा कि यह आपके घंटे, मिनट और सेकंड से 0 पर सेट है, लेकिन क्या वास्तव में तारीख नहीं बदलती है?
जेसपर बाइलंड

मुझे कल आने के लिए नकारात्मक संख्याओं का उपयोग करना था d.setHours(-1,0,0,0):। यह कल की तारीख को वापस आ जाएगा, लेकिन यह वह समय नहीं हो सकता है जैसा आप चाहते हैं (23:00:00)
cs_pupil

1

यह कोशिश करो, मेरे लिए काम करता है:

var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `

यह मुझे कल के लिए एक दिनांक ऑब्जेक्ट वापस मिल गया


1
चूँकि आप आज का उपयोग कर रहे हैं। शुरुआत करें, आज कल के रूप में भी बदल जाएगा। कल चर बनाने के लिए बेहतर है और फिर इसे सेट करें। var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)तो आप आज और कल दोनों का उपयोग कर सकते हैं
PersyJack

1

यहाँ एक लाइनर है जिसका उपयोग टेक्स्ट में फॉर्मेट YYYY-MM-DD में कल की तारीख पाने और टाइमज़ोन ऑफसेट को संभालने के लिए किया जाता है।

new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]

यह समय पर वापस लौटने के लिए, दिन में एक्स-रे बदल सकता है। समय आदि को शामिल करने के लिए

console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"

// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000    // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000


0

यदि आप दोनों को कल की तारीख प्राप्त करना चाहते हैं और उस तारीख को मानव पठनीय प्रारूप में प्रारूपित करना चाहते हैं, तो एक कस्टम DateHelperऑब्जेक्ट बनाने पर विचार करें जो कुछ इस तरह दिखता है:

var DateHelper = {
    addDays : function(aDate, numberOfDays) {
        aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
        return aDate;                                  // Return the date
    },
    format : function format(date) {
        return [
           ("0" + date.getDate()).slice(-2),           // Get day and pad it with zeroes
           ("0" + (date.getMonth()+1)).slice(-2),      // Get month and pad it with zeroes
           date.getFullYear()                          // Get full year
        ].join('/');                                   // Glue the pieces together
    }
}

// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));

( इस फिडेल को भी देखें )


0

आप क्षणिकाओं का उपयोग कर सकते हैं यह बहुत मददगार है आप इस पुस्तकालय के साथ बहुत सी चीजें प्राप्त कर सकते हैं।

वर्तमान समय के साथ कल की तारीख प्राप्त करें moment().subtract(1, 'days').toString()

कल की तारीख के साथ शुरुआत करें moment().subtract(1, 'days').startOf('day').toString()


0

बाउंड्री डेट प्रॉब्लम (2020, 01, 01) -> 2019, 12, 31 को हल करें

var now = new Date();
return new Date(now.getMonth() - 1 === 0 ? now.getFullYear() - 1 : now.getFullYear(),
                now.getDate() - 1 === 0 ? now.getMonth() - 1: now.getMonth(),
                now.getDate() - 1);

-1

"Date.now () - 86400000" डेलाइट सेविंग एंड डे पर काम नहीं करेगा (जिसमें उस दिन 25 घंटे हैं)

एक अन्य विकल्प क्लोजर का उपयोग करना है:

var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.