जावास्क्रिप्ट में एक तारीख बढ़ाना


433

मुझे जावास्क्रिप्ट में एक दिन से तारीख मूल्य बढ़ाने की आवश्यकता है।

उदाहरण के लिए, मेरे पास दिनांक २०१०-०९ -११ है और मुझे अगले दिन की तारीख को जावास्क्रिप्ट चर में संग्रहित करने की आवश्यकता है।

मैं एक दिन में एक तिथि कैसे बढ़ा सकता हूं?


क्या इससे आपके सवाल का जवाब मिलता है? जावास्क्रिप्ट तिथि में दिन जोड़ें
माइकल फ्रीजिम

जवाबों:


791

आपके लिए तीन विकल्प:

1. केवल जावास्क्रिप्ट Dateऑब्जेक्ट (कोई लाइब्रेरी नहीं) का उपयोग करना :

# 1 के लिए मेरा पिछला उत्तर गलत था (इसमें 24 घंटे जोड़े गए, दिन के उजाले के समय से संक्रमण के लिए खाते में विफल रहा; क्लेवर ह्यूमन ने बताया कि यह 7 नवंबर 2010 के साथ पूर्वी समयक्षेत्र में विफल हो जाएगा)। इसके बजाय, जिगर का जवाब एक पुस्तकालय के बिना ऐसा करने का सही तरीका है:

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

यह एक महीने (या वर्ष) के अंतिम दिन के लिए भी काम करता है, क्योंकि जावास्क्रिप्ट तिथि ऑब्जेक्ट रोलओवर के बारे में स्मार्ट है:

(यह उत्तर वर्तमान में स्वीकार किया जाता है, इसलिए मैं इसे हटा नहीं सकता। इससे पहले कि मैं ओपी को सुझाव देता कि वे जिगर के स्वीकार करते हैं, लेकिन शायद उन्होंने सूची में आइटम # 2 या # 3 के लिए इसे स्वीकार कर लिया।)

2. MomentJS का उपयोग करना :

var today = moment();
var tomorrow = moment(today).add(1, 'days');

(सावधान रहें कि addआप उस उदाहरण को संशोधित करते हैं, जिसे आप नया उदाहरण देने के बजाय उसे कॉल करते हैं, इसलिए today.add(1, 'days')संशोधित किया जाएगा today। इसीलिए हम क्लोनिंग सेशन शुरू करते हैं var tomorrow = ...।)

3. DateJS का उपयोग करना , लेकिन यह लंबे समय में अपडेट नहीं किया गया है:

var today = new Date(); // Or Date.today()
var tomorrow = today.add(1).day();

। लेकिन मैं document.getElementById का उपयोग कर ( "ARRIVAL_DATE") द्वारा एक चर में तारीख 2010-09-11 राशि मूल्य, यह अमान्य दिनांक से पता चलता
शांतनु

1
@ संतनु: यह एक पूरी तरह से अलग समस्या है: तिथि पार्सिंग (एक स्ट्रिंग की व्याख्या करके एक तिथि प्राप्त करना)। यदि वह प्रारूप स्थिर है, तो आप इसे स्वयं पार्स कर सकते हैं और परिणाम को Dateकंस्ट्रक्टर ( new Date(year, month, date)) में खिला सकते हैं ; विनिर्देश की धारा 15.9.2.1 देखें ; यदि आप कई प्रकार के प्रारूप स्वीकार करना चाहते हैं, तो निश्चित रूप से DateJS पर एक नज़र डालें
टीजे क्राउडर

1
@ शांतनु: बस इसके बाद के संस्करण का पालन करने के लिए: कुछ ब्राउज़र सफलतापूर्वक उस प्रारूप को पार्स कर सकते हैं Date.parse(जिसके साथ आप कितने मिलीसेकंड मिल सकते हैं new Date(ms))। लेकिन सावधान रहें, यह ब्राउज़र से ब्राउज़र में भिन्न हो सकता है। कुछ समय पहले तक, कार्यान्वयन केवल उन चीजों के बारे में कर सकता था जो वे चाहते थे Date.parse। नए 5 वें संस्करण के विनिर्देश में अब एक न्यूनतम प्रारूप है जिसे स्वीकार किया जाना चाहिए, लेकिन मैं अभी तक उस पर भरोसा नहीं करूंगा।
टीजे क्राउडर

मैं सिर्फ एक दूसरे को डेट इंस्टेंस में जोड़ना चाहता था; यह मेरे लिए काम करता है x = new Date(); x2 = new Date(x.getTime() + 1000), जहां 1000 मिलीसेकंड की वृद्धि है।
बर्थ डे

1
@ पियावघ: पहले समाधान में कुछ भी गलत नहीं है, यह सिर्फ यह है कि आप इसका उपयोग कैसे कर रहे हैं। Dateवस्तुएं परस्पर हैं। आप एक ही Date ऑब्जेक्ट को तीन बार सरणी में स्टोर कर रहे हैं । यदि आप तीन अलग-अलग Dateऑब्जेक्ट चाहते हैं, तो आपको तीन ऑब्जेक्ट बनाने होंगे:var unavailableDates = []; for (var d = new Date('2017-05-11'); d < new Date('2017-05-13'); d.setDate(d.getDate() + 1)) { unavailableDates.push(new Date(+d)); }
टीजे क्राउडर

178
var myDate = new Date();

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

। लेकिन मैं document.getElementById का उपयोग कर ( "ARRIVAL_DATE") द्वारा एक चर में तारीख 2010-09-11 राशि मूल्य, यह अमान्य दिनांक से पता चलता
शांतनु

1
@sanatu: उस स्थिति में आपको स्ट्रिंग को इस तरह से प्रारूपित करने की आवश्यकता होती है जिसे ब्राउज़र स्वीकार करेगा। क्रोम स्वीकार करता है new Date("2009-09-11")लेकिन फ़ायरफ़ॉक्स नहीं करता है। मुझे लगता है कि अधिकांश ब्राउज़र स्वीकार करते हैं new Date("2009/09/11")कि एक आसान समाधान होगा var arrivalDate = document.getElementById('arival_date').value; var dayAfter = new Date(arrival_date.replace(/-/g, '/')); dayAfter.setDate(dayAfter.getDate()+1);
डेविड हेडलंड

5
के -साथ प्रतिस्थापित करने /और उम्मीद करने से अधिक ठोस दृष्टिकोण कि ब्राउज़र इसे स्वीकार करेंगे, स्ट्रिंग को भागों में विभाजित करना होगा: var dateParts = arrivalDate.split('-'); var y = parseInt(dateParts[0], 10); var m = parseInt(dateParts[1], 10); var d = parseInt(dateParts[2], 10); var dayAfter = new Date(y, m-1, d+1);ध्यान दें कि हम m-1यहां उपयोग कर रहे हैं, क्योंकि जावास्क्रिप्ट महीने एनम मान हैं (जनवरी 0, नहीं 1), और d+1क्योंकि हम प्रारंभिक असाइनमेंट में पहले से ही वृद्धि कर रहा है (यह 29 फरवरी को स्वचालित रूप से सही हो जाएगा, आदि)
डेविड हेडलंड

35

इस उत्तर में कोई भी उदाहरण डेलाइट सेविंग टाइम समायोजन दिनों के साथ काम नहीं करता है। उन दिनों में, एक दिन में घंटों की संख्या 24 नहीं होती है (वे 23 या 25 हैं, यह निर्भर करता है कि आप "आगे चल रहे हैं" या "पीछे गिर रहे हैं"।)

नीचे दी गई बचत समय के लिए AddDays javascript फ़ंक्शन खाते हैं:

function addDays(date, amount) {
  var tzOff = date.getTimezoneOffset() * 60 * 1000,
      t = date.getTime(),
      d = new Date(),
      tzOff2;

  t += (1000 * 60 * 60 * 24) * amount;
  d.setTime(t);

  tzOff2 = d.getTimezoneOffset() * 60 * 1000;
  if (tzOff != tzOff2) {
    var diff = tzOff2 - tzOff;
    t += diff;
    d.setTime(t);
  }

  return d;
}

यहां वे परीक्षण हैं जो मैंने फ़ंक्शन का परीक्षण करने के लिए उपयोग किए हैं:

    var d = new Date(2010,10,7);
    var d2 = AddDays(d, 1);
    document.write(d.toString() + "<br />" + d2.toString());

    d = new Date(2010,10,8);
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 27 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, 1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

    d = new Date('Sun Mar 28 2011 01:59:00 GMT+0100 (CET)');
    d2 = AddDays(d, -1)
    document.write("<hr /><br />" +  d.toString() + "<br />" + d2.toString());

33

सबसे आसान तरीका यह है कि मिलीसेकंड में कनवर्ट करें और 1000 * 60 * 60 * 24 मिलीसेकंड जोड़ें।

var tomorrow = new Date(today.getTime()+1000*60*60*24);

मुझे यह पसंद है, पूर्णांक प्रतिनिधित्व नियम।
एक्सबुक

यह सबसे अच्छा जवाब है। अनुरोध के अनुसार आसानी से उतने दिन में वेतन वृद्धि / कमी कर सकते हैं; सिर्फ 1000*60*60*24x गुणा करकेDaysToBeAdded
खलील खल

या, new Date(+new Date() + 1000*60*60*24)लेकिन यह वास्तव में getTime()/ के समान है setTime(), वास्तव में।
पोलाव

1
जब तक आपकी तिथि UTC या किसी अन्य समय क्षेत्र में न हो, तब तक ऐसा न करें, जिसमें दिन का समय बचत न हो। अन्यथा, प्रति वर्ष 2 दिनों के लिए, यह अप्रत्याशित परिणाम देगा।
इटलीपेलएले

एक लाइनर:new Date(Date.now()+1000*60*60*24);
aiyan

28

कल शुद्ध जेएस में एक लाइन में लेकिन यह बदसूरत है !

new Date(new Date().setDate(new Date().getDate() + 1))

यहाँ परिणाम है:

Thu Oct 12 2017 08:53:30 GMT+0200 (Romance Summer Time)

14

दूसरे लोगों के सुझाव का पालन करने से पहले आपको अपनी स्ट्रिंग को पार्स करना होगा:

var dateString = "2010-09-11";
var myDate = new Date(dateString);

//add a day to the date
myDate.setDate(myDate.getDate() + 1);

यदि आप इसे फिर से उसी प्रारूप में चाहते हैं तो आपको वह "मैन्युअल" करना होगा:

var y = myDate.getFullYear(),
    m = myDate.getMonth() + 1, // january is month 0 in javascript
    d = myDate.getDate();
var pad = function(val) { var str = val.toString(); return (str.length < 2) ? "0" + str : str};
dateString = [y, pad(m), pad(d)].join("-");

लेकिन मैं सुझाव देता हूं कि अन्य उत्तरों में बताए अनुसार Date.js प्राप्त करें, इससे आपको बहुत मदद मिलेगी ।


7

मुझे लगता है कि कुछ भी सुरक्षित नहीं है .getTime()और .setTime()इसलिए, यह सबसे अच्छा होना चाहिए, और साथ ही कलाकार भी।

const d = new Date()
console.log(d.setTime(d.getTime() + 1000 * 60 * 60 * 24)) // MILLISECONDS

.setDate() अमान्य दिनांक के लिए (जैसे 31 + 1) बहुत खतरनाक है, और यह ब्राउज़र के कार्यान्वयन पर निर्भर करता है।


5

अगले 5 दिन हो रहे हैं:

var date = new Date(),
d = date.getDate(),
m = date.getMonth(),
y = date.getFullYear();


for(i=0; i < 5; i++){
var curdate = new Date(y, m, d+i)
console.log(curdate)
}

उपरोक्त उत्तर देने की कोशिश की लेकिन व्यर्थ। आपके कोड ने एक आकर्षण की तरह काम किया। धन्यवाद!
10

4

दो तरीके:

1:

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setTime(a.getTime() + no_of_days * 86400000)

2: पिछली विधि के समान

var a = new Date()
// no_of_days is an integer value
var b = new Date(a.setDate(a.getDate() + no_of_days)

2

DateObj.toJSON () विधि Ref का उपयोग करके दिनांक का स्ट्रिंग मान प्राप्त करें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects-Date/toJSON स्लाइस दिनांक से लौटाएं मान और फिर आप जितने दिन चाहें उतनी वृद्धि कर सकते हैं।

var currentdate = new Date();
currentdate.setDate(currentdate.getDate() + 1);
var tomorrow = currentdate.toJSON().slice(0,10);

Date.toJSON का उपयोग करता UTC समयज़ोन stackoverflow.com/questions/11382606/...
AndreyP

2
 Date.prototype.AddDays = function (days) {
    days = parseInt(days, 10);
    return new Date(this.valueOf() + 1000 * 60 * 60 * 24 * days);
}

उदाहरण

var dt = new Date();
console.log(dt.AddDays(-30));
console.log(dt.AddDays(-10));
console.log(dt.AddDays(-1));
console.log(dt.AddDays(0));
console.log(dt.AddDays(1));
console.log(dt.AddDays(10));
console.log(dt.AddDays(30));

परिणाम

2017-09-03T15:01:37.213Z
2017-09-23T15:01:37.213Z
2017-10-02T15:01:37.213Z
2017-10-03T15:01:37.213Z
2017-10-04T15:01:37.213Z
2017-10-13T15:01:37.213Z
2017-11-02T15:01:37.213Z

आपका कोड काम नहीं करता है। मैंने इसे पहले कंसोल.लॉग () के साथ आज़माया है और यह कहता है: dt.AddDays () एक फ़ंक्शन नहीं है।
एड्रियन

1

पूरी तरह से सुनिश्चित नहीं है कि यह एक बग (परीक्षण किया गया फ़ायरफ़ॉक्स 32.0.3 और क्रोम 38.0.2125.101) है, लेकिन निम्न कोड ब्राज़ील (-3 GMT) पर विफल हो जाएगा:

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

$date = new Date(2014, 9, 16,0,1,1);
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");
$date.shiftDays(1);
console.log($date+"");

परिणाम:

Fri Oct 17 2014 00:01:01 GMT-0300
Sat Oct 18 2014 00:01:01 GMT-0300
Sat Oct 18 2014 23:01:01 GMT-0300
Sun Oct 19 2014 23:01:01 GMT-0200

तिथि में एक घंटा जोड़ना, यह पूरी तरह से काम करेगा (लेकिन समस्या का समाधान नहीं करता है)।

$date = new Date(2014, 9, 16,0,1,1);

परिणाम:

Fri Oct 17 2014 01:01:01 GMT-0300
Sat Oct 18 2014 01:01:01 GMT-0300
Sun Oct 19 2014 01:01:01 GMT-0200
Mon Oct 20 2014 01:01:01 GMT-0200

1

कल की तारीख के एक स्ट्रिंग प्रतिनिधित्व में परिणाम। आज की तारीख पाने के लिए नई तारीख () का उपयोग करें, Date.getDate () और Date.setDate () का उपयोग करके एक दिन जोड़ें, और दिनांक ऑब्जेक्ट को एक स्ट्रिंग में परिवर्तित करें।

  const tomorrow = () => {
      let t = new Date();
      t.setDate(t.getDate() + 1);
      return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, '0')}-${String(
        t.getDate()
      ).padStart(2, '0')}`;
    };
    tomorrow();

1

वेनिला js के साथ वृद्धि की तिथि:

start_date_value = "01/01/2019"
var next_year = new Date(start_date_value);
next_year.setYear(next_year.getYear() + 1);
console.log(next_year.getYear()); //=> 2020

यदि कोई व्यक्ति तारीख (दिन) के अलावा अन्य मूल्य बढ़ाना चाहता है


1

देशी जेएस, एक दिन जोड़ने के लिए आप निम्नलिखित कर सकते हैं:

let date = new Date(); // today
date.setDate(date.getDate() + 1) // tomorrow

एक अन्य विकल्प momentपुस्तकालय का उपयोग करना है:

const date = moment().add(14, "days").toDate()

1
कृपया समझाएं कि यह कोड क्या करता है। यह ओपी की समस्या को कैसे संबोधित करता है, इसके बारे में विवरण जोड़ें।
यश

1

जावास्क्रिप्ट तिथियों के लिए समयक्षेत्र / दिन की बचत बचत तिथि वृद्धि:

function nextDay(date) {
    const sign = v => (v < 0 ? -1 : +1);
    const result = new Date(date.getTime());
    result.setDate(result.getDate() + 1);
    const offset = result.getTimezoneOffset();
    return new Date(result.getTime() + sign(offset) * offset * 60 * 1000);
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.