जावास्क्रिप्ट तिथि में दिन जोड़ें


1091

Dateजावास्क्रिप्ट का उपयोग करके वर्तमान में दिन कैसे जोड़ें । क्या जावास्क्रिप्ट में .Net जैसे फंक्शन होते हैं AddDay?

जवाबों:


1207

आप इसके साथ एक बना सकते हैं: -

Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}

var date = new Date();

alert(date.addDays(5));

यदि आवश्यक हो तो महीने को स्वचालित रूप से बढ़ाने का ध्यान रखता है। उदाहरण के लिए:

8/31 + 1 दिन 9/1 हो जाएगा ।

setDateसीधे उपयोग करने के साथ समस्या यह है कि यह एक उत्परिवर्ती है और इस तरह की चीज से सबसे अच्छा बचा जाता है। ECMA ने Dateएक अपरिवर्तनीय संरचना के बजाय एक उत्परिवर्ती वर्ग के रूप में व्यवहार करने के लिए फिट देखा ।


17
सरलीकृत:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
डंकन

27
@ डंकन क्या आपको यकीन है कि यह ऊपर जैसा है? यह एक बस 24 घंटे जोड़ता है, लेकिन एक दिन हमेशा 24 घंटे नहीं होता है । मुझे लगता है कि सवाल यह है कि समय भाग को बदले बिना, दिनांक भाग को 1 दिन कैसे बढ़ाया जाए।
तमसे बोलवरी

88
864E5किसी कारण से मैं 24*60*60अपने कोड में लिखना पसंद करता हूँ :)
मंगल

62
दोस्तों, 864E5 जोड़ने की विधि का उपयोग न करें क्योंकि यह दिन के उजाले के अंतर को नहीं लेता है जहाँ दिन 23 या 25 घंटे हो सकते हैं।
sbrbot

12
डेलाइट सेविंग्स के बारे में आप में से जो चिंतित हैं - उनके लिए नहीं। ये एल्गोरिदम अंतर्निहित तारीख को बदलते हैं, न कि यह कि कैसे तारीख की व्याख्या की जाती है। डीएसटी को तारीखों और बसने वालों में लागू किया जाता है - गर्मियों में एक घंटे को घटाने के लिए गेटर्स, और समय को सामान्य करने के लिए गर्मियों के दौरान उस घंटे को जोड़ने के लिए सेटर। लेकिन केवल एक निरपेक्ष घंटे का उपयोग करते समय - सापेक्ष घंटों की व्याख्या करने की आवश्यकता नहीं है। यही कारण है कि तिथि गणित काम करता है। IMHO ...
जेरार्ड ओनेइल

754

सही उत्तर :

function addDays(date, days) {
  var result = new Date(date);
  result.setDate(result.getDate() + days);
  return result;
}

गलत उत्तर :

यह उत्तर कभी-कभी सही परिणाम प्रदान करता है लेकिन बहुत बार गलत वर्ष और महीना लौटाता है। यह उत्तर केवल उसी समय काम करता है जब आप उस तिथि को जोड़ रहे होते हैं जिसमें वर्तमान वर्ष और महीना होता है।

// Don't do it this way!
function addDaysWRONG(date, days) {
  var result = new Date();
  result.setDate(date.getDate() + days);
  return result;
}

प्रमाण / उदाहरण

इस JsFiddle की जाँच करें


@bzlm, हाँ अनिवार्य रूप से समान है। यह सिर्फ दिनांक प्रोटोटाइप को संशोधित नहीं करता है। मैं मुख्य उत्तर की खामियों को इंगित करना चाहता था।
स्पेयरबाइट्स

इसकी खामियों को इंगित करने के लिए स्वीकृत उत्तर को एक पखवाड़े पहले संपादित किया गया था। क्या आपको लगता है कि इसे और संपादन की आवश्यकता है? यदि हां, तो कैसे?
bzlm

7
@bzlm: हाँ, मेरा मानना ​​है कि नोट को "यह दृष्टिकोण विफल हो जाता है अगर 'तारीख से' उसी वर्ष या महीने में चालू तारीख के रूप में नहीं है "। मुझे अभी भी चिंता है कि उपयोगकर्ता उत्तर पर ध्यान देंगे और चेतावनी नहीं पढ़ेंगे क्योंकि यह बाहर नहीं खड़ा है। धन्यवाद।
स्पेयरबाइट्स

3
मुझे लगता है, भले ही यह काम सही न हो। दिनांक के लिए ऐसा कोई निर्माता नहीं है: var result = new Date (दिनांक); , http://www.w3schools.com/js/js_dates.asp देखें । यहां तक ​​कि अगर यह आमतौर पर काम करता है, तो कभी-कभी स्ट्रिंग और इसके विपरीत रूपांतरण के कारण गलत परिणाम हो सकते हैं। यह var result = new Date (date.getTime ())
मार्सिन

2
@AnkitBalyan, अन्य उत्तर देखें। यह डेलाइट बचत समय के कारण सही ढंग से काम नहीं कर सकता है
जुलाब

188
var today = new Date();
var tomorrow = new Date();
tomorrow.setDate(today.getDate()+1);

सावधान रहें, क्योंकि यह मुश्किल हो सकता है। "कल" सेट करते समय, यह केवल इसलिए काम करता है क्योंकि यह वर्तमान मूल्य "आज" के लिए वर्ष और महीने से मेल खाता है। हालाँकि, सामान्य रूप से "32" जैसी दिनांक संख्या पर सेट करना अभी भी अगले महीने इसे स्थानांतरित करने के लिए ठीक काम करेगा।


1
हाँ? मगर यह क्या? (31 मार्च, 2010 को चली): आज = ​​नई तिथि (); कल = नई तिथि (); tomorrow.setDate (today.getDate () +1); चेतावनी (tomorrow.getMonth ()); कहते हैं "3"। चेतावनी (कल); सही है ... क्यों ???
d -_- b

12
@sims महीना 0 अनुक्रमित है। महीना 3 अप्रैल है
जोएल कोएहॉर्न

6
2 अलग-अलग दिनांक ऑब्जेक्ट बनाने की आवश्यकता क्यों है? बस उसी दिनांक ऑब्जेक्ट का उपयोग क्यों नहीं किया जाता है var d = new Date(); d.setDate( d.getDate() + 1 );:?
जोसेफ सिल्बर

8
यह दृष्टिकोण वर्षों में काम नहीं करता है। यदि आपकी शुरुआती तारीख कुछ साल पहले की है, तो उस वर्ष का दिनgetDate() लौटाता है । फिर, कॉलिंग चालू वर्ष में दिन निर्धारित करता है । तो यह है नहीं एक अच्छा सामान्य समाधान। @ AnthonyWJones का जवाब वास्तव में सही तरीके से काम करता है। setDate
ड्रू नोक

3
@ DrewNoakes- यह कहना कि यह सालों से काम नहीं करता है, गलत है। getDate महीने में दिन लौटाता है, न कि "उस वर्ष का दिन"। जैसे var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)3 जनवरी 2017 देता है जो 2 साल को पार करता है।
रॉब

123

मेरा सरल उपाय है:

nextday=new Date(oldDate.getFullYear(),oldDate.getMonth(),oldDate.getDate()+1);

इस समाधान में डेलाइट सेविंग टाइम की समस्या नहीं है। इसके अलावा, कोई भी वर्षों, महीनों, दिनों आदि के लिए किसी भी ऑफसेट को जोड़ / उप कर सकता है।

day=new Date(oldDate.getFullYear()-2,oldDate.getMonth()+22,oldDate.getDate()+61);

सही कोड है


13
नोट: यह 00:00:00 तक का समय
reslvaro González

जैसा कि आप कहते हैं, किसी भी महीने के अंतिम दिन काम नहीं करता है। यह वर्ष के 12 दिनों में अनुपयोगी हो जाता है। एक बुरा सपना की तरह लगता है डिबग !!!
ड्रू नॉक

6
नहीं आकर्षित किया, यह वर्ष पर सभी दिनों के लिए उपयोग करने योग्य है। आप दिनांक ऑफ़सेट को 31 से बड़ा या महीने की ऑफसेट को 12 से बड़ा रख सकते हैं और यह फ़ंक्शन इसे अगले महीने में दिन या अगले वर्ष में महीने के रूप में पुनर्गणना करेगा। इसलिए उदाहरण के लिए: nextday = new Date (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); पूरी तरह से अच्छी तरह से कोड है।
sbrbot

वहाँ getMonth है () + 22 - आपको क्या लगता है कि यह काम करेगा !?
11:11

1
मैं सहमत हूं, इस तरह से उपयोग करें। हमारे पास दिन के समय की बचत के कारण एक बग था क्योंकि हम उपयोग कर रहे थे setDate
जेले

95

ये उत्तर मुझे भ्रमित करने वाले लगते हैं, मुझे पसंद है:

var ms = new Date().getTime() + 86400000;
var tomorrow = new Date(ms);

getTime () हमें 1970 से मिलीसेकंड देता है, और 86400000 एक दिन में मिलीसेकंड की संख्या है। इसलिए, एमएस में वांछित तिथि के लिए मिलीसेकंड शामिल है।

मिलीसेकंड कंस्ट्रक्टर का उपयोग वांछित दिनांक ऑब्जेक्ट देता है।


46
यह समाधान दिन की बचत को ध्यान में नहीं रखता है। इसलिए, उदाहरण के लिए, यह उसी तारीख को, 23 घंटे बाद लौटेगा: new Date(new Date('11/4/2012').getTime() + 86400000)
नूह हैरिसन

6
@ नोहामिलर समस्या जो आप लाते हैं वह एक बग नहीं एक विशेषता हो सकती है! DST के आधार पर परिणामी समय को जानने के लक्ष्य के साथ, प्रति दिन 24 घंटे जोड़ना कभी-कभी सही होता है। आपके उदाहरण रिटर्न की तारीख 4 नवंबर को 11 बजे का समय मान है जो उस विशेष दिन पर 24 घंटे बाद है। मूल पोस्टर ने डेटाइम के बारे में पूछा जो दिन के सही समय के लिए कुछ इच्छा को इंगित करता प्रतीत होगा। यदि आपका लक्ष्य 24 घंटे बाद का समय है, तो यह उत्तर सही है।
एंडी नोवोसिन

3
मैं सहमत हूँ नूह, var d2 = नई तिथि (d1.valueOf () + 24 * 60 * 60 * 1000) जो कहती है, वह करती है, एक पूरे दिन के मूल्य को एक तिथि में जोड़ देती है।
कोरी एलिक्स

6
यह कुछ मामलों के लिए बिल्कुल सही है (उदाहरण के लिए 1 दिन कुकीज़) और अन्य लोगों की तुलना में सरल समाधान। मुझे नहीं लगता कि इसमें इतने सारे डाउनवोट और इतने कम
अपवोट्स

48

प्रयत्न

var someDate = new Date();
var duration = 2; //In Days
someDate.setTime(someDate.getTime() +  (duration * 24 * 60 * 60 * 1000));

सेटटेट () का उपयोग करते हुए एक तारीख को जोड़ने के लिए अपनी समस्या को हल न करें, कुछ दिनों को एक फरवरी महीने में जोड़ने का प्रयास करें, यदि आप इसमें नए दिन जोड़ने की कोशिश करते हैं, तो इसका परिणाम आपके द्वारा अपेक्षित परिणाम नहीं होगा।


26
नहीं, इसे सही उत्तर के रूप में चिह्नित नहीं किया जाना चाहिए क्योंकि यह समाधान मानता है कि हर दिन 24 * 60 * 60 * 1000 सेकंड है लेकिन यह (दिन की बचत) नहीं करता है!
sbrbot

के साथ 'फ़रवरी' समस्या के बारे में कोई सबूत setDate()? क्या यह ऐसा है: stackoverflow.com/questions/5497637/…
nobar

9
+1 यह सही जवाब के रूप में चिह्नित किया जाना चाहिए। मेरा मानना ​​है कि "डेलाइट सेविंग" प्रस्तुति के बारे में है न कि मूल्य के बारे में , जो कि मिलीसेकंड की संख्या है। से मूल्य को देखने के सूत्रीय - दिन जब के संदर्भ में, millisecs की CONST संख्या है प्रस्तुति यह भिन्न हो सकते हैं।
विघटित

1
@ विच्छेदित - यह सही उत्तर नहीं है। दिन के उजाले की बचत से निकलने वाले दिन में 25 घंटे होते हैं, लेकिन यह विधि केवल 24 जोड़ती है इसलिए तारीख समान होगी। एक दिन का प्रतिनिधित्व करने के लिए 24 घंटे का उपयोग करना काम करता है यदि यूटीसी तरीकों का उपयोग किया जाता है, लेकिन सेटडेट का उपयोग करते समय परेशान क्यों होता है और अधिक सुविधाजनक है? ;-)
RobG

38

नीचे बिताए गए युगों का काम करने की कोशिश कर रहे उम्र के साथ सौदा नीचे के उदाहरणों का पालन करते समय जोड़ने वाले वर्ष के साथ नहीं था।

यदि आप केवल उन दिनों में केवल तारीखों को जोड़ना चाहते हैं, जिनके लिए आप बस जाने के लिए सर्वश्रेष्ठ हैं:

myDate.setDate (myDate.getDate () + n);

या लंबे समय तक संस्करण

var theDate = new Date(2013, 11, 15);
var myNewDate = new Date(theDate);
myNewDate.setDate(myNewDate.getDate() + 30);
console.log(myNewDate);

यह आज / कल का सामान भ्रामक है। अपने नए दिनांक चर में वर्तमान दिनांक सेट करके आप वर्ष मान को गड़बड़ कर देंगे। यदि आप मूल तिथि से काम करते हैं तो आप नहीं करेंगे।


7
जब तक मुझे यह गहना नहीं मिल जाता, तब तक सभी उत्तरों को पढ़ना। अब यह समझ में आता है। कमाल की बात यह है कि आज / कल की बात लगभग सभी उत्तरों में कॉपी की गई थी, जब यह बिल्कुल भी समझ में नहीं आता है और यह "पठनीयता और स्पष्टता के लिए" नहीं है, जैसा कि लेखक ने सबसे अधिक उत्तर दिए गए उत्तर में कहा है- सबसे ज्यादा टिप्पणी की गई- यह भ्रामक और एक बुरा अभ्यास है और गलत है
Cesc

23

यदि आप कर सकते हैं, तो moment.js का उपयोग करें । जावास्क्रिप्ट में बहुत अच्छी देशी तिथि / समय विधियाँ नहीं हैं। निम्नलिखित एक पल का वाक्यविन्यास है:

var nextWeek = moment().add(7, 'days');
alert(nextWeek);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment-with-locales.min.js"></script>

संदर्भ: http://momentjs.com/docs/#/manipulating/add/


1
@ kpull1 पूछने वाले ने समाधान डोमेन को प्रतिबंधित नहीं किया यह पूछकर कि क्या कोई अंतर्निहित समाधान मौजूद है।
user2910265

4
आधुनिक नोट: इस तरह के एक छोटे से उद्देश्य के लिए मोमेंट.जेएस अविश्वसनीय रूप से भारी है। यह कई सौ केबी का है, और बॉक्स के बाहर वेबपैक के अनुकूल नहीं है।
यहोशू कॉम्यू

1
हमारी पसंदीदा लाइब्रेरी तारीख़-fns है। वेबपैक के अनुकूल, तेज, और डेट्स को अपरिवर्तनीय मानता है।
फ़्रीवल्कर

1
@ ल्यूक विलियम्स ने अब तक कभी भी डेट-फन्स के बारे में नहीं सुना। इसकी जांच करेंगे। धन्यवाद।
user2910265

2
@JoshuaComeau यदि आप इसे cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.3/moment.min.js से डाउनलोड करते हैं , तो यह डिस्क पर 53,248 बाइट्स लेता है। मुझे लगता है कि पूरी गेंद ओ 'मोम है, लेकिन मुझे नहीं पता। खैर जो भी हो। यह एक बड़ा सौदा नहीं है।
बर्डस

22
int days = 1;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now() + days * 24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);


2
मध्यवर्ती तिथि चर की आवश्यकता नहीं होने पर अपवोट करें।
जेफ लोरी

यह सबसे अच्छा उत्तर है क्योंकि इसमें उत्परिवर्तन
knocte

हर दिन 24 घंटों का नहीं है, यह डीएसटी और छलांग सेकंड के लिए विफल रहता है।
Stephan

19

मैंने कल रात ये एक्सटेंशन बनाए:
आप सकारात्मक या नकारात्मक मूल्यों को पारित कर सकते हैं;

उदाहरण:

var someDate = new Date();
var expirationDate = someDate.addDays(10);
var previous = someDate.addDays(-5);


Date.prototype.addDays = function (num) {
    var value = this.valueOf();
    value += 86400000 * num;
    return new Date(value);
}

Date.prototype.addSeconds = function (num) {
    var value = this.valueOf();
    value += 1000 * num;
    return new Date(value);
}

Date.prototype.addMinutes = function (num) {
    var value = this.valueOf();
    value += 60000 * num;
    return new Date(value);
}

Date.prototype.addHours = function (num) {
    var value = this.valueOf();
    value += 3600000 * num;
    return new Date(value);
}

Date.prototype.addMonths = function (num) {
    var value = new Date(this.valueOf());

    var mo = this.getMonth();
    var yr = this.getYear();

    mo = (mo + num) % 12;
    if (0 > mo) {
        yr += (this.getMonth() + num - mo - 12) / 12;
        mo += 12;
    }
    else
        yr += ((this.getMonth() + num - mo) / 12);

    value.setMonth(mo);
    value.setYear(yr);
    return value;
}

7
.Addays () पद्धति उन तिथियों के लिए काम नहीं करती है जो दिन के उजाले की समय सीमा को पार करती हैं।
mskfisher

1
यह यहाँ बेहतर उत्तरों में से एक है क्योंकि आप (सही तरीके से) दिनांक / समय का प्रतिनिधित्व करने के लिए युग के बाद से मिली की संख्या का उपयोग करते हैं, और समायोजन के लिए मिली की मात्रा जोड़ते हैं ... तो फिर आपने इसे "addMonths" के लिए क्यों नहीं रखा! ? और कोई जोड़ साल क्यों नहीं? क्या आप ऊब गए थे?
रॉबिन

महीनों के अलावा, समय अवधि को स्थिर संख्याओं द्वारा दर्शाया जा सकता है। लेकिन महीने चार अलग-अलग लंबाई के हो सकते हैं। इसके अलावा, किसी भी समयावधि की अवधि डेज़ और उच्चतर में DST पर परिवर्तनशील लंबाई हो सकती है, इसलिए आप किसी अन्य स्तर की जटिलता के बिना समय-आधारित जोड़ का उपयोग नहीं कर सकते। मैंने AddYears () जोड़ा, और मैंने addMonths () को ठीक किया।
सुमेरे

14

दूसरे चर का उपयोग किए बिना, आप अपने अगले x दिनों के साथ 7 को बदल सकते हैं:

let d=new Date(new Date().getTime() + (7 * 24 * 60 * 60 * 1000));

14

घटाना करने के लिए 30 दिनों का उपयोग करें (24 घंटों = 86400000ms)

new Date(+yourDate - 30 *86400000)


कंप्यूटर विज्ञान में मिलीसेकंड के आधार पर तिथि समय की गणना करने की कोशिश करते समय हमेशा याद रखें, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) नई तिथि (+ आपकी तिथि 30 जून (24 * 60 * 1000 * 1000))
अशरफ अबुसदा

13

सबसे सरल उपाय।

 Date.prototype.addDays = function(days) {
   this.setDate(this.getDate() + parseInt(days));
   return this;
 };

 // and then call

 var newDate = new Date().addDays(2); //+2 days
 console.log(newDate);

 // or

 var newDate1 = new Date().addDays(-2); //-2 days
 console.log(newDate1);


मुझे लगता है कि यह सबसे अच्छा समाधान है। यदि हम दिनांक वर्ग का विस्तार कर रहे हैं, तो यह बेहतर समझ में आता है कि दिनांक उदाहरण स्वयं अद्यतन किया गया है।
पोर्लुने

10

आपके जवाब के लिए धन्यवाद जेसन जो उम्मीद के मुताबिक काम करता है, यहां आपके कोड और एंथनीवजोन के आसान प्रारूप से एक मिश्रण है:

Date.prototype.addDays = function(days){
    var ms = new Date().getTime() + (86400000 * days);
    var added = new Date(ms);
    return added;
}

6
एक दिन में 86400000 सेकंड से अधिक होने पर यह दिन के समय की बचत को ध्यान में नहीं रखता है और इसके परिणामस्वरूप आपके कोड में तार्किक त्रुटि (प्रोग्राम बग) हो सकती है।
sbrbot

कभी-कभी इसकी जरूरत होती है। ईबे एपीआई में एक्स-दिन की नीलामी होती है जो 24-घंटे आधारित होती है इसलिए आपका आइटम एक अलग समय पर समाप्त हो जाएगा, अगर डीएसटी की स्थिति मध्य-नीलामी में बदल जाती है। उस स्थिति में आपको तार्किक त्रुटियों से बचने के लिए इस प्रकार के फ़ंक्शन का उपयोग करने की आवश्यकता है।
एंडी नोवोसिन

10

पार्टी के लिए देर से, लेकिन अगर आप उपयोग करते हैं jQueryतो एक उत्कृष्ट प्लगइन होता है जिसे मोमेंट कहा जाता है:

http://momentjs.com/

var myDateOfNowPlusThreeDays = moment().add(3, "days").toDate();

http://momentjs.com/docs/#/manipulating/

और वहाँ बहुत सारे अन्य अच्छे सामान!

संपादित करें: jQuery संदर्भ aikeru की टिप्पणी के लिए धन्यवाद हटा दिया


1
पल की जरूरत नहीं है jQuery :)
aikeru

उस मामले में भी बेहतर !!
रेमर्कलिमा

1
हां, बहुत लंबे समय तक प्लेन ओल 'जेएस के साथ चक्कर लगाने के बाद, मैंने मोमेंट का इस्तेमाल किया, और यह सिर्फ काम करता है (टीएम)!
केसयमक्कल डिक्

जब जेएस की कुछ लाइनें करेंगे तो आप प्लगइन का उपयोग क्यों करना चाहेंगे?
फ्रेंची

@frenchie क्योंकि, जेएस की कुछ पंक्तियों के रूप में क्या शुरू होता है और क्योंकि स्पष्ट रूप से आपका आवेदन दिनों, तिथियों और समय से संबंधित जानकारी में हेरफेर कर रहा है, यह जल्द ही जेएस की कुछ 1000 लाइनें होगी, फिर आपको एप्लिकेशन को स्थानीय बनाने के लिए कहा जाएगा 12 भाषाओं और टाइमज़ोन और आप चाहते हैं कि आप कुछ पल के साथ बाहर शुरू कर दिया था;)
RemarkLima

10

पाइपलाइन ऑपरेटर के लिए बनाया गया एक समाधान :

const addDays = days => date => {
  const result = new Date(date);

  result.setDate(result.getDate() + days);

  return result;
};

उपयोग:

// Without the pipeline operator...
addDays(7)(new Date());

// And with the pipeline operator...
new Date() |> addDays(7);

यदि आपको अधिक कार्यक्षमता की आवश्यकता है, तो मैं सुझाव देता हूं कि दिनांक- fns पुस्तकालय में देखें।


8

पुराना मुझे पता है, लेकिन कभी-कभी मुझे यह पसंद है:

function addDays(days) {
    return new Date(Date.now() + 864e5 * days);
}

2
यह मेरे लिए सबसे ज्यादा मायने रखता है। यह सरल, सुरुचिपूर्ण है और महीनों / वर्षों से आगे बढ़ने वाले मुद्दों के लिए प्रार्थना नहीं करता है।
uadrive

1
सरलतम उत्तर प्रस्तुत किया। इस पर निर्माण, प्रोटोटाइप 'AddDays' निम्नलिखित होगा:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974

हर दिन 24 घंटों का नहीं है, यह डीएसटी और छलांग सेकंड के लिए विफल रहता है।
Stephan

8

मेरे पास प्रस्तावित समाधान के साथ दिन के समय बचत के मुद्दे थे।

का उपयोग करके getUTCDate/ setUTCDateइसके बजाय, मैंने अपना मुद्दा हल किया।

// Curried, so that I can create helper functions like `add1Day`
const addDays = num => date => {
  // Make a working copy so we don't mutate the supplied date.
  const d = new Date(date);

  d.setUTCDate(d.getUTCDate() + num);

  return d;
}

8

आप जावास्क्रिप्ट का उपयोग कर सकते हैं, कोई jQuery की आवश्यकता नहीं है:

var someDate = new Date();
var numberOfDaysToAdd = 6;
someDate.setDate(someDate.getDate() + numberOfDaysToAdd); 
Formatting to dd/mm/yyyy :

var dd = someDate.getDate();
var mm = someDate.getMonth() + 1;
var y = someDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;

8

बिना किसी चर के सामान्य प्रोटोटाइप, यह मौजूदा दिनांक मान पर लागू होता है:

Date.prototype.addDays = function (days) {
    return new Date(this.valueOf() + days * 864e5);
}

7

सेटडेट के लिए मोज़िला डॉक्स () यह नहीं दर्शाता है कि यह महीने के परिदृश्य के अंत को संभाल लेगा। Https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date देखें

तारीख सेट करें()

  • स्थानीय समय के अनुसार निर्दिष्ट तिथि के लिए महीने का दिन (1-31) निर्धारित करता है।

यही कारण है कि जब मुझे दिन जोड़ने की आवश्यकता होती है, तो मैं सेटटाइम () का उपयोग करता हूं।


मैं ECMAScript डॉक्स से लिंक करूंगा, लेकिन वे पीडीएफ में जारी किए गए हैं; (
ब्लेक मिल्स

1
" सेटडेट के लिए मोज़िला डॉक्स () इंगित नहीं करता है कि यह महीने के परिदृश्य के अंत को संभाल लेगा "। "डॉक्स" अपडेट कर दिए गए हैं इसलिए अब वे करते हैं। ;-)
RobG

7

इस रूप में सरल:

new Date((new Date()).getTime() + (60*60*24*1000));

2
हालांकि यह UTC दिनों को जोड़ता है, यह स्थानीय तरीकों का उपयोग करता है और स्थानीय दिनों की अनुमति नहीं देता है जो 24 घंटे लंबे नहीं होते हैं, जो तब होता है जब समय क्षेत्र में परिवर्तन होता है (जैसे दिन के उजाले की बचत में और बाहर)।
रॉबग

6

मुझे लगता है कि मैं एक उत्तर भी दूंगा:
व्यक्तिगत रूप से, मुझे आभारी चर घोषणा, विधि कॉल और कंस्ट्रक्टर कॉल से बचने का प्रयास करना पसंद है, क्योंकि वे प्रदर्शन पर सभी महंगे हैं। (कारण के भीतर, निश्चित रूप से)
मैं इसे केवल @AnthonyWJones द्वारा दिए गए उत्तर के तहत टिप्पणी के रूप में छोड़ने जा रहा था, लेकिन इसके बारे में बेहतर सोचा।

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setTime( 864E5 * days + this.valueOf() ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setTime( 864E5 * days + date.valueOf() ) && date;
};

उपरोक्त डीएसटी का सम्मान करेगा। मतलब अगर आप कई दिन जोड़ते हैं जो डीएसटी को पार करते हैं, तो प्रदर्शित समय (घंटा) उस को प्रतिबिंबित करेगा।
उदाहरण:
Nov 2, 2014 02:00 DST का अंत था।

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 09:30:00

यदि आप DST भर में समय को बनाए रखना चाहते हैं (तो 10:30 अभी भी 10:30 होगा) ...

// Prototype usage...
Date.prototype.addDays = Date.prototype.addDays || function( days ) {
    return this.setDate( this.getDate() + days ) && this;
};

// Namespace usage...
namespace.addDaysToDate = function( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

// Basic Function declaration...
function addDaysToDate( date, days ) {
    return date.setDate( date.getDate() + days ) && date;
};

तो, अब आपके पास ...

var dt = new Date( 2014, 10, 1, 10, 30, 0 );
console.log( dt );                  // Sat Nov 01 2014 10:30:00
console.log( dt.addDays( 10 ) );    // Tue Nov 11 2014 10:30:00

6

नहीं, जावास्क्रिप्ट का कोई अंतर्निहित कार्य नहीं है, लेकिन आप कोड की एक सरल रेखा का उपयोग कर सकते हैं

timeObject.setDate(timeObject.getDate() + countOfDays);

5

मैं कुछ का उपयोग करता हूं जैसे:

new Date(dateObject.getTime() + amountOfDays * 24 * 60 * 60 * 1000)

दिन की बचत समय के साथ काम करता है:

new Date(new Date(2014, 2, 29, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

नए साल के साथ काम करता है:

new Date(new Date(2014, 11, 31, 20, 0, 0).getTime() + 1 * 24 * 60 * 60 * 1000)

यह अपंग हो सकता है:

function DateAdd(source, amount, step) {
  var factor = 1;
  if (step == "day") factor = 24 * 60 * 60 * 1000;
  else if (step == "hour") factor = 60 * 60 * 1000;
  ...
  new Date(source.getTime() + amount * factor);
}

4

मैं निम्नलिखित समाधान का उपयोग कर रहा हूं।

var msInDay = 86400000;
var daysToAdd = 5;
var now = new Date();
var milliseconds = now.getTime();
var newMillisecods = milliseconds + msInDay * daysToAdd;
var newDate = new Date(newMillisecods);
//or now.setTime(newMillisecods);

तिथि में एक कंस्ट्रक्टर है जो एक इंट स्वीकार करता है। यह तर्क 1 जनवरी, 1970 से पहले / बाद के कुल मिलीसेकंड का प्रतिनिधित्व करता है। इसमें एक विधि सेटटाइम भी है जो एक नई दिनांक ऑब्जेक्ट बनाए बिना भी करता है।

हम यहां क्या करते हैं, दिनों को मिलीसेकंड में बदल दिया जाता है और इस मूल्य को गेटटाइम द्वारा प्रदान किए जाते हैं। अंत में, हम डेट (मिलीसेकंड) कंस्ट्रक्टर या सेटटाइम (मिलीसेकंड) विधि को परिणाम देते हैं।


हर दिन 24 घंटों का नहीं है, यह डीएसटी और छलांग सेकंड के लिए विफल रहता है।
Stephan

स्टीफ़न, क्या उसके लिए कोई अन्य पुस्तकालय खाता है?
वख्तंग

now.setDate(now.getDate() + days);स्वचालित रूप से DST परिवर्तनों को संभालता है। और मुझे सही करना है, जेएस टाइमस्टैम्प में लीप सेकंड को नजरअंदाज किया जाता है।
Stephan

4

संपादित करें: इसके बजाय setTime()(या setHours()) आप इसे इस तरह से कर सकते हैं:

Date.prototype.addDays= function(d){
  this.setDate(this.getDate() + d);
  return this;
};

var tomorrow = new Date().addDays(1);

पुराना:

उपयोग करने के बजाय setTime()आप उपयोग कर सकते हैं setHours():

Date.prototype.addDays= function(d){
    this.setHours(this.getHours() + d * 24);
    return this;
};

var tomorrow = new Date().addDays(1);

देखिए JSFiddle ...


इस तर्क का पालन करते हुए आप एक दिन भी जोड़ सकते हैं;)d.setDate(d.getDate() + 1);
रिवाइफ़ल


4

वहाँ एक है setDate और एक getDate विधि है, जो आप कुछ इस तरह करने की अनुमति:

var newDate = aDate.setDate(aDate.getDate() + numberOfDays);

यदि आप दोनों को कई दिनों तक घटाना चाहते हैं और अपनी तिथि को मानव पठनीय प्रारूप में प्रारूपित करना चाहते हैं, तो आपको एक कस्टम 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. Add 20 days
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), 20));

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


4

जावास्क्रिप्ट में प्रोटोटाइप का विस्तार एक अच्छा विचार नहीं हो सकता है , खासकर पेशेवर कोडबेस में।

आप जो करना चाहते हैं, वह मूल Dateवर्ग का विस्तार करना है :

class MyCustomDate extends Date {

  addDays(days) {
    const date = new MyCustomDate(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
  }
  
}

const today = new MyCustomDate();

const nextWeek = today.addDays(7)

console.log(nextWeek)

इस तरह, यदि एक दिन जावास्क्रिप्ट एक देशी addDaysविधि को लागू करता है , तो आप कुछ भी नहीं तोड़ेंगे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.