তারিখে এক্স মাস যুক্ত করতে জাভাস্ক্রিপ্ট ফাংশন


209

আমি জাভাস্ক্রিপ্টের তারিখে X মাস যুক্ত করার সবচেয়ে সহজ এবং পরিষ্কার উপায় খুঁজছি।

আমি বরং বছরের ঘূর্ণায়মানটি পরিচালনা করব না বা নিজের ফাংশনটি লিখতে চাই না

সেখানে কি এমন কিছু নির্মিত যা এটি করতে পারে?


4
তারিখের প্রোটোটাইপ অবজেক্টের মতো একটি পদ্ধতি যুক্ত করার চেষ্টা করুন, যেমন --------------- তারিখ.প্রোটোটাইপ.এডিডিমন্ট = ফাংশন (এন) new নতুন তারিখ ফেরান (this.setMonth (this.getMonth ( ) + N)); };
মাইসেস হিডালগো

1
@ কেআর ৩37, টার্গেট মাসে যদি আজকের দিনের সংখ্যা না থাকে তবে মাইসেস হিডালগো এর উত্তর সঠিকভাবে কাজ করবে না। বিএমপাসিনীর উত্তর এটিও পরিচালনা করে
আলেকজান্দ্রু সেভেরিন

এখানে উত্তরগুলি খুব ভাল নয়, আরও ভাল উত্তরগুলি জাভাস্ক্রিপ্টে একটি তারিখে মাস যোগ করার সময় রয়েছে
রবজি

উত্তর:


277

নিম্নলিখিত ফাংশনটি জাভাস্ক্রিপ্ট ( উত্স ) এ একটি তারিখে কয়েক মাস যুক্ত করে । এটি অ্যাকাউন্টের বছরের রোল-ওভার এবং বিভিন্ন মাসের দৈর্ঘ্যের ক্ষেত্রে নেয়:

function addMonths(date, months) {
    var d = date.getDate();
    date.setMonth(date.getMonth() + +months);
    if (date.getDate() != d) {
      date.setDate(0);
    }
    return date;
}

// Add 12 months to 29 Feb 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,1,29),12).toString());

// Subtract 1 month from 1 Jan 2017 -> 1 Dec 2016
console.log(addMonths(new Date(2017,0,1),-1).toString());

// Subtract 2 months from 31 Jan 2017 -> 30 Nov 2016
console.log(addMonths(new Date(2017,0,31),-2).toString());

// Add 2 months to 31 Dec 2016 -> 28 Feb 2017
console.log(addMonths(new Date(2016,11,31),2).toString());

উপরের সমাধানটি গন্তব্য মাসের চেয়ে বেশি সংখ্যক দিন সহ এক মাস থেকে চলার প্রান্তের কেসটি কভার করে। যেমন।

  • 29202020 ফেব্রুয়ারীতে বারো মাস যুক্ত করুন (ফেব্রুয়ারী 28 শে 2021 হওয়া উচিত)
  • আগস্ট 312020 এ এক মাস যোগ করুন (30 সেপ্টেম্বর 2020 হওয়া উচিত)

যদি প্রয়োগের সময় মাসের দিনটি পরিবর্তিত হয় setMonth, তবে আমরা জানি যে মাসের দৈর্ঘ্যের পার্থক্যের কারণে আমরা পরের মাসে উপচে পড়েছি। এই ক্ষেত্রে, আমরা setDate(0)আগের মাসের শেষ দিনটিতে ফিরে যেতে ব্যবহার করি ।

দ্রষ্টব্য: এই উত্তরের এই সংস্করণটি পূর্ববর্তী সংস্করণ (নীচে) প্রতিস্থাপন করে যা বিভিন্ন মাসের দৈর্ঘ্যে নিখুঁতভাবে পরিচালনা করে না।

var x = 12; //or whatever offset
var CurrentDate = new Date();
console.log("Current date:", CurrentDate);
CurrentDate.setMonth(CurrentDate.getMonth() + x);
console.log("Date after " + x + " months:", CurrentDate);

130
যত্নবান - এটি বেশিরভাগ মাসের 31 তম দিন যুক্ত করার মতো এজ প্রসেসের ক্ষেত্রে কাজ করে না। উদাহরণস্বরূপ, জাভা স্ক্রিপ্টের স্ট্যান্ডার্ড তারিখ অবজেক্টটি ব্যবহার করে 31 অক্টোবর 2011 + 1 মাস এই পদ্ধতিটি ব্যবহার করে Dec
বাচ্চা

6
ভাল ধরা, বাবা। আমি অবাক হয়েছি যে আমি এটি দেখিনি। নোট করুন যে টি-এসকিউএল নির্বাচন করুন তারিখ (মাস, 1, '2011-10-31') '2011-11-30' দেয়, যা আমার কাছে যুক্তিসঙ্গত। আমি খারাপ উত্তর দিয়ে 10 টি ভোট পেয়েছি। কুল। :-)
চাদ

2
লিপ বছরগুলিও দেখুন - ২২ শে ফেব্রুয়ারী লিপ বছরে 1 বছর যুক্ত করা আপনি কোন ভাষা ব্যবহার করছেন তার উপর নির্ভর করে (সাধারণ উত্তর হিসাবে) আপনাকে অনির্দেশ্য ফলাফল দেবে। মাইক্রোসফ্ট আজুর মেঘের প্ল্যাটফর্মটি এটিই 2012 সালে বেশ কয়েক ঘন্টা ধরে ফেলেছিল
বেন ওয়াল্ডিং

15
এখানে একটি addMonthsফাংশন রয়েছে যা মাসের শেষ শ্রদ্ধা করে (যেমন 2012-01-31 + 1 month = 2012-02-29ইত্যাদি) and
রবজি

3
কেবলমাত্র প্রতিমাসের 1 ম তারিখ নির্ধারণ করতে যুক্ত করুন: আজ.সেটআউটস (0, 0, 0, 0); today.setDate (1);
আলেক্সি স্ট্র্যাখ

56

আমি ডেট-টাইম ম্যানিপুলেশনের জন্য moment.js লাইব্রেরি ব্যবহার করছি । এক মাস যোগ করার জন্য নমুনা কোড:

var startDate = new Date(...);
var endDateMoment = moment(startDate); // moment(...) can also be used to parse dates in string format
endDateMoment.add(1, 'months');

12
আপনার নিজস্ব বিড়ম্বনার জন্য, moment.js ব্যবহার করুন।
গা

3
পুরোপুরি @garry এর সাথে একমত: moment.js ব্যবহার করুন।
মিশেল

2
আমি সম্মত হই যে এটিই সবচেয়ে পরিষ্কার উপায়, তবে প্রশ্নটি ছিল "এটির মধ্যে কি এমন কিছু নির্মিত যা এটি করতে পারে?" মুহুর্ত পৃষ্ঠা আকারে কয়েক ডজন কেবি যুক্ত করে
এভেজেনি

এটা ভাল ছিল। নেট থেকে অন্য কোনও প্লাগইন আমি খুঁজে পাইনি যা এর চেয়ে আরও ভাল কিছু করতে পারে।
ইরানিচান

26

এই ফাংশনটি প্রান্তের কেসগুলি পরিচালনা করে এবং দ্রুত:

function addMonthsUTC (date, count) {
  if (date && count) {
    var m, d = (date = new Date(+date)).getUTCDate()

    date.setUTCMonth(date.getUTCMonth() + count, 1)
    m = date.getUTCMonth()
    date.setUTCDate(d)
    if (date.getUTCMonth() !== m) date.setUTCDate(0)
  }
  return date
}

পরীক্ষা:

> d = new Date('2016-01-31T00:00:00Z');
Sat Jan 30 2016 18:00:00 GMT-0600 (CST)
> d = addMonthsUTC(d, 1);
Sun Feb 28 2016 18:00:00 GMT-0600 (CST)
> d = addMonthsUTC(d, 1);
Mon Mar 28 2016 18:00:00 GMT-0600 (CST)
> d.toISOString()
"2016-03-29T00:00:00.000Z"

নন-ইউটিসি তারিখগুলির জন্য আপডেট: (এ। হ্যাচকিন্স দ্বারা)

function addMonths (date, count) {
  if (date && count) {
    var m, d = (date = new Date(+date)).getDate()

    date.setMonth(date.getMonth() + count, 1)
    m = date.getMonth()
    date.setDate(d)
    if (date.getMonth() !== m) date.setDate(0)
  }
  return date
}

পরীক্ষা:

> d = new Date(2016,0,31);
Sun Jan 31 2016 00:00:00 GMT-0600 (CST)
> d = addMonths(d, 1);
Mon Feb 29 2016 00:00:00 GMT-0600 (CST)
> d = addMonths(d, 1);
Tue Mar 29 2016 00:00:00 GMT-0600 (CST)
> d.toISOString()
"2016-03-29T06:00:00.000Z"

এখানে একমাত্র যুক্তিসঙ্গত উত্তর। তবে ইউটিসিবিহীন তারিখগুলির যত্ন নিতে হবে। এটি অপ্রত্যাশিত ফলাফল আনতে পারে (উদাহরণস্বরূপ 31 জানুয়ারি + 1 মাস = 1 মার্চ ইউটিসি + 1 টাইমজোন মধ্যরাতের জন্য)
অ্যান্টনি হ্যাচকিন্স

1
আরেকটি সমস্যা হ'ল এটি উভয়ই আসল তারিখটি সংশোধন করে এবং পরিবর্তিত মানটি দেয়। ডেট প্রোটোটাইপের সাথে এটি যুক্ত করা বা ফাংশনটিতে পরিবর্তিত তারিখের জন্য স্থানীয় ভেরিয়েবল ব্যবহার করা বোধগম্য হতে পারে?
অ্যান্টনি হ্যাচকিনস

ধন্যবাদ অ্যান্টনি, একটি স্থানীয় পরিবর্তনশীল তা উপলব্ধি করে।
এমারক্রুজ

1
আমি হয় "রিটার্নের তারিখ" লাইনটি সরিয়ে দিতে বা একটি স্থানীয় ভের যোগ করার পরামর্শ দেব
অ্যান্টনি হ্যাচকিন্স

স্থানীয় পরিবর্তনশীল এবং পৃথক পৃথক পরীক্ষা ব্যবহার করে আপডেট করা হয়েছে।
aMarCruz

12

মাস পরিবর্তন হওয়ার সাথে সাথে এই উত্তরগুলির কোনওটিরই বর্তমান বছরের হিসাব হবে না, আপনি নীচে তৈরি একটি উত্তর খুঁজে পাবেন যা এটি পরিচালনা করবে:

পদ্ধতি:

Date.prototype.addMonths = function (m) {
    var d = new Date(this);
    var years = Math.floor(m / 12);
    var months = m - (years * 12);
    if (years) d.setFullYear(d.getFullYear() + years);
    if (months) d.setMonth(d.getMonth() + months);
    return d;
}

ব্যবহার:

return new Date().addMonths(2);

এই জবাবটি মাস যোগ করার জন্য হিসাব করে না কারণ ফলাফলের মাসে কোনও সম্পর্কিত তারিখ ছিল না (যেমন জানুয়ারী 31 + 1 মাস => 2 বা 3 মার্চ)। এটিও মনে হয় যে কোনও তারিখে 12 মাসের বেশি সংখ্যক যোগ করার ক্ষেত্রে সমস্যা আছে: নেই। 1 বছর 1 মাস যোগ করার জন্য 13 মাস বলার দরকার নেই। মাত্র 13 মাস যুক্ত করুন।
রবজি

9

@ বিম্পসিনি এবং @ জাজার্ট প্রতিক্রিয়া থেকে নেওয়া হয়েছে , তবে প্রোটোটাইপগুলি বাড়ানো হচ্ছে না: সরল ফাংশন ব্যবহার করে ( দেশীয় বস্তুগুলিকে প্রসারিত করা কেন একটি খারাপ অভ্যাস? ):

function isLeapYear(year) { 
    return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); 
}

function getDaysInMonth(year, month) {
    return [31, (isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}

function addMonths(date, value) {
    var d = new Date(date),
        n = date.getDate();
    d.setDate(1);
    d.setMonth(d.getMonth() + value);
    d.setDate(Math.min(n, getDaysInMonth(d.getFullYear(), d.getMonth())));
    return d;
}

এটা ব্যবহার করো:

var nextMonth = addMonths(new Date(), 1);

4

উপরের উত্তরগুলি থেকে, একমাত্র প্রান্তের কেসগুলি পরিচালনা করে (বিমপাসিনি এর ডেটজস লাইব্রেরি থেকে) একটি সমস্যা আছে:

var date = new Date("03/31/2015");
var newDate = date.addMonths(1);
console.log(newDate);
// VM223:4 Thu Apr 30 2015 00:00:00 GMT+0200 (CEST)

ঠিক আছে কিন্তু:

newDate.toISOString()
//"2015-04-29T22:00:00.000Z"

খারাপ:

var date = new Date("01/01/2015");
var newDate = date.addMonths(3);
console.log(newDate);
//VM208:4 Wed Apr 01 2015 00:00:00 GMT+0200 (CEST)
newDate.toISOString()
//"2015-03-31T22:00:00.000Z"

এটি সময় নির্ধারিত না হওয়ার কারণে, সুতরাং 00:00:00-এ ফিরে যা টাইমজোন বা সময় সাশ্রয়ী পরিবর্তন বা যা কিছু পরিবর্তনের কারণে পূর্ববর্তী দিনে চলে যেতে পারে ...

আমার প্রস্তাবিত সমাধানটি এখানে দেওয়া আছে, এতে যে সমস্যা নেই এবং এটিও মনে হয়, এটি আরও মার্জিত যে এটি হার্ড-কোডড মানগুলিতে নির্ভর করে না।

/**
* @param isoDate {string} in ISO 8601 format e.g. 2015-12-31
* @param numberMonths {number} e.g. 1, 2, 3...
* @returns {string} in ISO 8601 format e.g. 2015-12-31
*/
function addMonths (isoDate, numberMonths) {
    var dateObject = new Date(isoDate),
        day = dateObject.getDate(); // returns day of the month number

    // avoid date calculation errors
    dateObject.setHours(20);

    // add months and set date to last day of the correct month
    dateObject.setMonth(dateObject.getMonth() + numberMonths + 1, 0);

    // set day number to min of either the original one or last day of month
    dateObject.setDate(Math.min(day, dateObject.getDate()));

    return dateObject.toISOString().split('T')[0];
};

ইউনিট সাফল্যের সাথে পরীক্ষিত:

function assertEqual(a,b) {
    return a === b;
}
console.log(
    assertEqual(addMonths('2015-01-01', 1), '2015-02-01'),
    assertEqual(addMonths('2015-01-01', 2), '2015-03-01'),
    assertEqual(addMonths('2015-01-01', 3), '2015-04-01'),
    assertEqual(addMonths('2015-01-01', 4), '2015-05-01'),
    assertEqual(addMonths('2015-01-15', 1), '2015-02-15'),
    assertEqual(addMonths('2015-01-31', 1), '2015-02-28'),
    assertEqual(addMonths('2016-01-31', 1), '2016-02-29'),
    assertEqual(addMonths('2015-01-01', 11), '2015-12-01'),
    assertEqual(addMonths('2015-01-01', 12), '2016-01-01'),
    assertEqual(addMonths('2015-01-01', 24), '2017-01-01'),
    assertEqual(addMonths('2015-02-28', 12), '2016-02-28'),
    assertEqual(addMonths('2015-03-01', 12), '2016-03-01'),
    assertEqual(addMonths('2016-02-29', 12), '2017-02-28')
);

3

হিসাবে উত্তর অধিকাংশ হাইলাইট, আমরা ব্যবহার করতে পারে setMonth () পদ্ধতি একসঙ্গে সঙ্গে () getMonth পদ্ধতি একটি প্রদত্ত তারিখ থেকে মাসের নির্দিষ্ট নম্বর যোগ করতে।

উদাহরণ: (তার উত্তরে @ চ্যাডডি উল্লেখ করেছেন।)

var x = 12; //or whatever offset 
var CurrentDate = new Date();
CurrentDate.setMonth(CurrentDate.getMonth() + x);

তবে আমাদের এই সমাধানটি সাবধানতার সাথে করা উচিত কারণ আমরা প্রান্তের সমস্যাগুলির সাথে সমস্যা পেতে পারি।

প্রান্তের মামলাগুলি পরিচালনা করতে, নিম্নলিখিত লিঙ্কে দেওয়া উত্তরটি সহায়ক।

https://stackoverflow.com/a/13633692/3668866


3

সহজ সমাধান: 267840000031 মিনিট সেকেন্ডে

var oneMonthFromNow = new Date((+new Date) + 2678400000);

হালনাগাদ:

আমাদের নিজস্ব ফাংশনটি তৈরি করতে এই ডেটাটি ব্যবহার করুন:

  • 2678400000 - 31 দিন
  • 2592000000 - 30 দিন
  • 2505600000 - 29 দিন
  • 2419200000 - 28 দিন

8
কিছু মাসের 31 দিন নেই
আলেকজান্দ্রু সেভেরিন

সম্মত হন, তবে আপনি সহজেই সমন্বয় করতে পারেন, বা ফাংশনটি লিখতে পারেন
dr.dimitru

2
আমি অনুমান করছি যে লোকেদের যে জিনিসটি সন্ধান করছে তা হ'ল এটি খুব কার্যকরী যা স্বয়ংক্রিয়ভাবে মাসগুলিতে দিনগুলিতে অ্যাকাউন্ট গ্রহণ করে।
আলেকজান্ডার বার্ড

@ আলেকজান্ডার বার্ড তারপরে মুহুর্তের মতো অন্য কারও দ্বারা নির্মিত বুলেটপ্রুফ সরঞ্জাম ব্যবহার করুন .js
dr.dimitru

2
এই উত্তরটি দিবালোক সংরক্ষণের সাথে সামঞ্জস্য করে না, যেখানে সমস্ত দিন 24 ঘন্টা (বা 8.64e7 মিলিসেকেন্ড) দীর্ঘ হয় না।
রবিজি

2
d = new Date();

alert(d.getMonth()+1);

মাসগুলিতে 0-ভিত্তিক সূচক থাকে, এটি সতর্ক হওয়া উচিত (4) যা 5 (মে) হয়;


এই পদ্ধতিটি <0 এবং 12 এর চেয়ে বড়
প্যাট্রিক

2

কেবল গৃহীত উত্তর এবং মন্তব্যে যোগ করতে।

var x = 12; //or whatever offset
var CurrentDate = new Date();

//For the very rare cases like the end of a month
//eg. May 30th - 3 months will give you March instead of February
var date = CurrentDate.getDate();
CurrentDate.setDate(1);
CurrentDate.setMonth(CurrentDate.getMonth()+X);
CurrentDate.setDate(date);

2
আপনি যখন তারিখ (31) "1 ফেব্রুয়ারি" তে সেট করেন আপনি "3 মার্চ" পান। আপনি কি সত্যিই এটি চান?
অ্যান্টনি হ্যাচকিন্স

2

আমি এই বিকল্প সমাধানটি লিখেছি যা আমার পক্ষে ভাল কাজ করে। আপনি যখন কোনও চুক্তির সমাপ্তি গণনা করতে চান এটি কার্যকর। উদাহরণস্বরূপ, শুরু = 2016-01-15, মাস = 6, শেষ = 2016-7-14 (অর্থাত্ শেষ দিন - 1):

<script>
function daysInMonth(year, month)
{
    return new Date(year, month + 1, 0).getDate();
}

function addMonths(date, months)
{
    var target_month = date.getMonth() + months;
    var year = date.getFullYear() + parseInt(target_month / 12);
    var month = target_month % 12;
    var day = date.getDate();
    var last_day = daysInMonth(year, month);
    if (day > last_day)
    {
        day = last_day;
    }
    var new_date = new Date(year, month, day);
    return new_date;
}

var endDate = addMonths(startDate, months);
</script>

উদাহরণ:

addMonths(new Date("2016-01-01"), 1); // 2016-01-31
addMonths(new Date("2016-01-01"), 2); // 2016-02-29 (2016 is a leap year)
addMonths(new Date("2016-01-01"), 13); // 2017-01-31
addMonths(new Date("2016-01-01"), 14); // 2017-02-28

0

নীচের ফর্ম ক্ষেত্রগুলির মাধ্যমে তারিখ ইনপুট (সদস্যতা-সাইনআপ_ডেট) + যোগ করা মাস (সদস্যতা)

সদস্যতামথাগুলির ক্ষেত্রে 0 এর একটি ডিফল্ট মান থাকে

ট্রিগার লিঙ্ক (সদস্যপদ শর্তের ক্ষেত্রের সাথে সংযুক্ত একটি ইভেন্ট হতে পারে):

<a href="#" onclick="calculateMshipExp()"; return false;">Calculate Expiry Date</a>

function calculateMshipExp() {

var calcval = null;

var start_date = document.getElementById("membershipssignup_date").value;
var term = document.getElementById("membershipsmonths").value;  // Is text value

var set_start = start_date.split('/');  

var day = set_start[0];  
var month = (set_start[1] - 1);  // January is 0 so August (8th month) is 7
var year = set_start[2];
var datetime = new Date(year, month, day);
var newmonth = (month + parseInt(term));  // Must convert term to integer
var newdate = datetime.setMonth(newmonth);

newdate = new Date(newdate);
//alert(newdate);

day = newdate.getDate();
month = newdate.getMonth() + 1;
year = newdate.getFullYear();

// This is British date format. See below for US.
calcval = (((day <= 9) ? "0" + day : day) + "/" + ((month <= 9) ? "0" + month : month) + "/" + year);

// mm/dd/yyyy
calcval = (((month <= 9) ? "0" + month : month) + "/" + ((day <= 9) ? "0" + day : day) + "/" + year);

// Displays the new date in a <span id="memexp">[Date]</span> // Note: Must contain a value to replace eg. [Date]
document.getElementById("memexp").firstChild.data = calcval;

// Stores the new date in a <input type="hidden" id="membershipsexpiry_date" value="" name="membershipsexpiry_date"> for submission to database table
document.getElementById("membershipsexpiry_date").value = calcval;
}

0

যেভাবে জটিল, কুরুচিপূর্ণ উত্তর উপস্থাপিত হয়েছিল, অনেকগুলি দ্বারা প্রদর্শিত, ডেটস এবং টাইমস যে কোনও ভাষা ব্যবহার করে প্রোগ্রামারদের জন্য দুঃস্বপ্ন হতে পারে। আমার পদ্ধতিটি হ'ল তারিখগুলি এবং 'ডেল্টা টি' মানগুলিকে ইপচ টাইমে (এমএসে) রূপান্তর করা, কোনও গাণিতিক সম্পাদনা করা, তারপরে "মানব সময়" এ রূপান্তর করা।

// Given a number of days, return a Date object
//   that many days in the future. 
function getFutureDate( days ) {

    // Convert 'days' to milliseconds
    var millies = 1000 * 60 * 60 * 24 * days;

    // Get the current date/time
    var todaysDate = new Date();

    // Get 'todaysDate' as Epoch Time, then add 'days' number of mSecs to it
    var futureMillies = todaysDate.getTime() + millies;

    // Use the Epoch time of the targeted future date to create
    //   a new Date object, and then return it.
    return new Date( futureMillies );
}

// Use case: get a Date that's 60 days from now.
var twoMonthsOut = getFutureDate( 60 );

এটি কিছুটা ভিন্ন ব্যবহারের ক্ষেত্রে লেখা হয়েছিল, তবে আপনার সম্পর্কিত কাজের জন্য এটি সহজেই মানিয়ে নিতে সক্ষম হওয়া উচিত।

সম্পাদনা: এখানে সম্পূর্ণ উত্স !


3
অকেজো উত্তর, কারণ এটি বিভিন্ন সংখ্যক দিনের সাথে মাসগুলি পরিচালনা করে না, যা প্রশ্ন।
বেনুবার্ড

1
@ বেনুবার্ড - যেহেতু আপনি খুব বিনয়ের সাথে জিজ্ঞাসা করেছেন, তাই আমি সম্পূর্ণ উত্স আপলোড করেছি। এই পোস্টে লিঙ্ক।
ড্যান আহলকুইস্ট

এটি দিবালোক সংরক্ষণও সামঞ্জস্য করে না, যেখানে সমস্ত দিন 24 ঘন্টা (বা 8.64e7 মিলিসেকেন্ড) দীর্ঘ হয় না।
রবজি

না, তা হয় না। ডিএসটি স্থানীয়করণের উদ্বেগ।
ড্যান আহলকুইস্ট

0

এই সমস্ত উপায় খুব জটিল বলে মনে হচ্ছে এবং আমি অনুমান করি যে এটি "একমাস" হিসাবে যুক্ত করার অর্থ কী তা নিয়ে বিতর্ক হয়ে যায়। এর মানে কি 30 দিন? এটি 1 ম থেকে 1 ম মানে কি? শেষ দিন থেকে শেষ দিন?

যদি পরবর্তীটি হয়, তবে ২ 27 শে ফেব্রুয়ারিতে এক মাস যুক্ত করে আপনাকে ২ March শে মার্চ এনে দেয়, তবে ২৮ শে ফেব্রুয়ারিতে এক মাস যুক্ত করে আপনাকে ৩১ শে মার্চ এনে দেয় (লিপ বছর বাদে, যেখানে এটি আপনাকে ২৮ শে মার্চে নিয়ে যায়)। তারপরে 30 শে মার্চ থেকে এক মাস বিয়োগ করা আপনার ... 27 শে ফেব্রুয়ারী? কে জানে...

একটি সহজ সমাধান খুঁজছেন তাদের জন্য, কেবলমাত্র মিলিসেকেন্ড যুক্ত করুন এবং হয়ে যান।

function getDatePlusDays(dt, days) {
  return new Date(dt.getTime() + (days * 86400000));
}

অথবা

Date.prototype.addDays = function(days) {
  this = new Date(this.getTime() + (days * 86400000));
};

আমার কাছে মনে হচ্ছে এটি স্পষ্ট যে "এক্স মাস যুক্ত করা" মানে X দ্বারা মাস বৃদ্ধি পায় It's এটি সত্য যে আপনার উত্তরটির কোডের সাথে কম অ্যালগোরিদমিক পদক্ষেপ রয়েছে, তবে দুর্ভাগ্যক্রমে আমি অনুভব করি যে নির্ভুলতা সরলতাকে ট্রাম্প করে। লোকেরা যখন কোনও উত্তর খুঁজতে থাকে, তারা চাইবে 'জুলাই 31 2016' 'অউজেস্ট 31 2016' হয়ে উঠুক। এবং এটি যে করবে না। তদুপরি, আপনি যদি যথার্থতার ব্যয় করে সত্যই সরলতা চান, তবে কেন আটকে থাকবেন না d.setMonth(d.getMonth()+1)? সুতরাং এটি এমনকি সহজ ধারণা নয়।
আলেকজান্ডার বার্ড

এটি দিবালোক সংরক্ষণও সামঞ্জস্য করে না, যেখানে সমস্ত দিন 24 ঘন্টা (বা 8.64e7 মিলিসেকেন্ড) দীর্ঘ হয় না।
রবজি

-1
addDateMonate : function( pDatum, pAnzahlMonate )
{
    if ( pDatum === undefined )
    {
        return undefined;
    }

    if ( pAnzahlMonate === undefined )
    {
        return pDatum;
    }

    var vv = new Date();

    var jahr = pDatum.getFullYear();
    var monat = pDatum.getMonth() + 1;
    var tag = pDatum.getDate();

    var add_monate_total = Math.abs( Number( pAnzahlMonate ) );

    var add_jahre = Number( Math.floor( add_monate_total / 12.0 ) );
    var add_monate_rest = Number( add_monate_total - ( add_jahre * 12.0 ) );

    if ( Number( pAnzahlMonate ) > 0 )
    {
        jahr += add_jahre;
        monat += add_monate_rest;

        if ( monat > 12 )
        {
            jahr += 1;
            monat -= 12;
        }
    }
    else if ( Number( pAnzahlMonate ) < 0 )
    {
        jahr -= add_jahre;
        monat -= add_monate_rest;

        if ( monat <= 0 )
        {
            jahr = jahr - 1;
            monat = 12 + monat;
        }
    }

    if ( ( Number( monat ) === 2 ) && ( Number( tag ) === 29 ) )
    {
        if ( ( ( Number( jahr ) % 400 ) === 0 ) || ( ( Number( jahr ) % 100 ) > 0 ) && ( ( Number( jahr ) % 4 ) === 0 ) )
        {
            tag = 29;
        }
        else
        {
            tag = 28;
        }
    }

    return new Date( jahr, monat - 1, tag );
}


testAddMonate : function( pDatum , pAnzahlMonate )
{
    var datum_js = fkDatum.getDateAusTTMMJJJJ( pDatum );
    var ergebnis = fkDatum.addDateMonate( datum_js, pAnzahlMonate );

    app.log( "addDateMonate( \"" + pDatum + "\", " + pAnzahlMonate + " ) = \"" + fkDatum.getStringAusDate( ergebnis ) + "\"" );
},


test1 : function()
{
    app.testAddMonate( "15.06.2010",    10 );
    app.testAddMonate( "15.06.2010",   -10 );
    app.testAddMonate( "15.06.2010",    37 );
    app.testAddMonate( "15.06.2010",   -37 );
    app.testAddMonate( "15.06.2010",  1234 );
    app.testAddMonate( "15.06.2010", -1234 );
    app.testAddMonate( "15.06.2010",  5620 );
    app.testAddMonate( "15.06.2010", -5120 );

}

1
আমি খুব ভার্জিরেন্ড পাই যখন বেশিরভাগ কোড ইংরেজিতে না হয় এবং ডয়চে ভেরিয়েবল। ;)
বার্নহার্ড হফম্যান 13

-1

কখনও কখনও দরকারী একটি বিআরটি প্যারামিটার মত একটি অপারেটর দ্বারা তারিখ তৈরি

আমি 1 মাস আগে দিয়েছিলাম:

new Date(new Date().setMonth(new Date().getMonth()-1));   

-3
var a=new Date();
a.setDate(a.getDate()+5);

উপরে বর্ণিত পদ্ধতি হিসাবে, আপনি Dateফাংশনে মাস যুক্ত করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.