জাভাস্ক্রিপ্টে একটি তারিখ বাড়ানো


433

আমার জাভাস্ক্রিপ্টে একটি দিন তারিখের মান বাড়ানো দরকার।

উদাহরণস্বরূপ, আমার তারিখের মান আছে 2010-09-11 এবং আমার পরের দিনের তারিখটি একটি জাভাস্ক্রিপ্ট ভেরিয়েবলে সঞ্চয় করা দরকার।

আমি কীভাবে কোনও দিন বাড়িয়ে দিতে পারি?


উত্তর:


791

আপনার জন্য তিনটি বিকল্প:

1. কেবল জাভাস্ক্রিপ্টের Dateঅবজেক্ট (কোনও লাইব্রেরি নেই) ব্যবহার করে:

# 1 এর জন্য আমার পূর্ববর্তী উত্তরটি ভুল ছিল (এটি 24 ঘন্টা যোগ করেছে, দিবালোকের সময় সাশ্রয় করার সময় এবং পরে ট্রানজিশনের জন্য অ্যাকাউন্টে ব্যর্থ হয়েছিল; চতুর হিউম্যান নির্দেশ করেছেন যে এটি পূর্ব টাইমজোন November নভেম্বর, ২০১০ এ ব্যর্থ হবে)। পরিবর্তে, জিগার উত্তরটি লাইব্রেরি ছাড়াই এটি করার সঠিক উপায়:

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

এটি এমনকি এক মাসের শেষ দিন (বা বছর) পর্যন্ত কাজ করে, কারণ জাভাস্ক্রিপ্টের তারিখ অবজেক্ট রোলওভার সম্পর্কে স্মার্ট:

(এই উত্তরটি বর্তমানে গৃহীত হয়েছে, সুতরাং আমি এটি মুছে ফেলতে পারি না it এটি গ্রহণ করার আগে আমি ওপিকে প্রস্তাব দিয়েছিলাম তারা জিগারকে গ্রহণ করে তবে সম্ভবত তারা এই উত্তরটি তালিকার # 2 বা # 3 আইটেমের জন্য গ্রহণ করেছেন))

২.মমেন্টজএস ব্যবহার করে :

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

(যে বিষয়ে সতর্ক থাকুন addমডিফাই উদাহরণস্বরূপ, আপনি তে এটি কল বরং একটি নতুন উদাহরণ ফেরার চেয়ে, তাই today.add(1, 'days')পরিবর্তন হবে today। যে কারণে আমরা একটি ক্লোনিং অপ দিয়ে শুরু var tomorrow = ...।)

৩. ডেটজেএস ব্যবহার করা , তবে এটি দীর্ঘ সময় আপডেট হয়নি:

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

তবে ডকুমেন্ট.জেটমেন্টমেন্ট বাইআইডি ("আগমন_ তারিখ") ব্যবহার করে আমার পরিবর্তনশীলতে আমার তারিখ 2010-09-11 রয়েছে value মানটি, এটি অবৈধ তারিখটি দেখায়
সান্তানু

1
@ সানতানু: এটি সম্পূর্ণ আলাদা সমস্যা: তারিখ পার্সিং (স্ট্রিংয়ের ব্যাখ্যা দিয়ে একটি তারিখ পাওয়া)। যদি সেই ফর্ম্যাটটি স্থিতিশীল হয় তবে আপনি নিজেই এটি বিশ্লেষণ করতে পারেন এবং ফলাফলগুলি Dateকনস্ট্রাক্টর ( new Date(year, month, date)) এ ফিড করতে পারেন ; স্পেসিফিকেশন 15.9.2.1 বিভাগ দেখুন ; আপনি যদি অনেকগুলি বিন্যাস গ্রহণ করতে চান তবে অবশ্যই ডেটজেএসে একবার দেখুন ।
টিজে ক্রাউডার

1
@ সানতানু: উপরোক্ত অনুসরনের জন্য: কিছু ব্রাউজারগুলি সফলভাবে সেই ফর্ম্যাটটি পার্স করতে পারে Date.parse(যা আপনি পরে খাওয়াতে পারেন এমন অনেক মিলি সেকেন্ডের পরিমাণ দেয় new Date(ms))। তবে সাবধান, এটি ব্রাউজার থেকে ব্রাউজারে পরিবর্তিত হতে পারে। সম্প্রতি অবধি, বাস্তবায়নগুলি তারা যা কিছু করতে চেয়েছিল কেবল তার সম্পর্কে করতে পারে Date.parse। নতুন 5 তম সংস্করণের স্পেসিফিকেশনটিতে এখন একটি ন্যূনতম ফর্ম্যাট রয়েছে যা অবশ্যই গ্রহণযোগ্য হবে, তবে আমি এখনও এটিতে বিশ্বাস করি না।
টিজে ক্রাউডার

আমি কেবল একটি তারিখের উদাহরণে একটি সেকেন্ড যুক্ত করতে চেয়েছিলাম; এটি আমার পক্ষে কাজ করেছে x = new Date(); x2 = new Date(x.getTime() + 1000), যেখানে 1000 মিলিসেকেন্ড বৃদ্ধি incre
বার্তো

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);

তবে ডকুমেন্ট.জেটমেন্টমেন্ট বাইআইডি ("আগমন_ তারিখ") ব্যবহার করে আমার পরিবর্তনশীলটিতে 2010-09-11 তারিখ রয়েছে value মানটি, এটি অবৈধ তারিখটি দেখায়
সান্তানু

1
@ সাসানাতু: সেক্ষেত্রে আপনাকে স্ট্রিংটিকে এমনভাবে ফর্ম্যাট করতে হবে যাতে ব্রাউজারটি গ্রহণ করবে। ক্রোম গ্রহণ করে 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এখানে, কারণ জাভাস্ক্রিপ্ট মাসের enum মান (জানুয়ারী হচ্ছে 0, না 1), এবং d+1কারণ আমরা 'ইতিমধ্যে প্রাথমিক কার্যক্রমে ইনক্রিমেন্টেশন করছেন (এটি 29 ফেব্রুয়ারি ইত্যাদির জন্য স্বয়ংক্রিয়ভাবে ঠিক হয়ে যাবে)
ডেভিড হেডলন্ড

35

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

নীচের অ্যাডডেস জাভাস্ক্রিপ্ট ফাংশন দিবালোক সংরক্ষণ সময় জন্য অ্যাকাউন্ট:

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*24xDaysToBeAdded
খলিল খালাফ

বা, new Date(+new Date() + 1000*60*60*24)তবে এটি আসলে getTime()/ এর সাথে সত্যই মিল রয়েছে setTime()
পোলভ

1
আপনার তারিখটি ইউটিসি বা অন্য কোনও সময় অঞ্চলে না থাকে যদি না দিবালোক সঞ্চয় সময় না থাকে তবে এটি করবেন না। অন্যথায়, প্রতি বছর 2 দিনের জন্য, এটি অপ্রত্যাশিত ফলাফল দেবে।
ইতালিপালেআল

একটি ওয়ান-লাইনার:new Date(Date.now()+1000*60*60*24);
আইয়ান

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("-");

তবে আমি অন্যান্য জবাবগুলিতে উল্লিখিত ডেট.জেএস পাওয়ার পরামর্শ দিচ্ছি, এটি আপনাকে অনেক সাহায্য করবে ।


7

আমি মনে করি কিছুই বেশী নিরাপদ .getTime()এবং .setTime(), তাই এই ভাল হওয়া উচিত, এবং সেইসাথে performant।

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)
}

উপরোক্ত উত্তরগুলি চেষ্টা করেও নিরর্থক। আপনার কোড একটি কবজ মত কাজ করে। ধন্যবাদ!
ডিমেট

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 () মেথড সূত্র ব্যবহার তারিখের স্ট্রিং মান পান 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 ব্যবহার ইউটিসি সময় অঞ্চল 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 () কোনও ফাংশন নয়।
অ্যাড্রিয়ান 2895

1

এটি কোনও BUG (পরীক্ষিত ফায়ারফক্স 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

আগামীকালের তারিখের স্ট্রিং উপস্থাপনায় ফলাফল। আজকের তারিখ পেতে নতুন তারিখ () ব্যবহার করুন, তারিখ.ডেটেট () এবং তারিখ.সেটেট () ব্যবহার করে একদিন যোগ করুন এবং তারিখের অবজেক্টটিকে স্ট্রিংয়ে রূপান্তর করুন।

  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

ভ্যানিলা জেএস সহ তারিখের বছর বাড়ানো:

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