ජාවාස්ක්‍රිප්ට් දිනයට දින එකතු කරන්න


1130

Dateජාවාස්ක්‍රිප්ට් භාවිතයෙන් ධාරාවට දින එකතු කරන්නේ කෙසේද . ජාවාස්ක්‍රිප්ට් .නෙට් වැනි ක්‍රියාකාරීත්වයකින් යුක්තද AddDay?

Answers:


1246

ඔබට මෙය නිර්මාණය කළ හැකිය: -

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කෙලින්ම භාවිතා කිරීමේ ගැටළුව නම් එය විකෘතියක් වන අතර ඒ ආකාරයේ දේ වළක්වා ගත හැකිය. Dateවෙනස් කළ නොහැකි ව්‍යුහයකට වඩා විකෘති පංතියක් ලෙස සැලකීමට ECMA සුදුසු විය .


17
සරල කළ:Date.prototype.addDays=function(d){return new Date(this.valueOf()+864E5*d);};
ඩන්කන්

28
Un ඩන්කන් මෙය ඉහත සඳහන් දේට සමාන බව ඔබට විශ්වාසද? මෙය සරලවම පැය 24 ක් එකතු කරයි, නමුත් එක් දිනක් සෑම විටම පැය 24 ක් නොවේ . මම හිතන්නේ ප්‍රශ්නය වන්නේ කාල කොටස වෙනස් නොකර දින කොටස දින 1 කින් වැඩි කරන්නේ කෙසේද යන්නයි.
ටමාස් බොල්වරි

92
864E5කිසියම් හේතුවක් නිසා මම 24*60*60මගේ කේතයෙන් ලිවීමට කැමැත්තෙමි :)
අඟහරු රොබට්සන්

64
යාලුවනේ, 864E5 එකතු කිරීමේ ක්‍රමය භාවිතා නොකරන්න, මෙය දින 23 ක් හෝ 25 ක් විය හැකි දිවා ආලෝකය ඉතිරි කිරීමේ වෙනසක් නොදක්වයි.
sbrbot

13
දිවා ආලෝකය ගැන ඔබ කනස්සල්ලට පත්ව සිටින අයට - එපා. මෙම ඇල්ගොරිතමයන් දිනය අර්ථ නිරූපණය කරන්නේ කෙසේද යන්න නොව යටින් පවතින දිනය වෙනස් කරයි. ඩීඑස්ටී ක්‍රියාත්මක කරනු ලබන්නේ දිනය ලබා ගන්නා අය සහ සැකසුම් කරුවන් තුළය - ගිම්හානයේදී පැයක් අඩු කිරීමට මුදල් ලබා ගන්නන් සහ කාලය සාමාන්‍යකරණය කිරීම සඳහා ගිම්හානයේදී එම පැය නැවත එකතු කිරීමට නියමුවා. නමුත් නිරපේක්ෂ පැයක් භාවිතා කරන විට පමණක් - සාපේක්ෂ පැය අර්ථ නිරූපණය කිරීම අවශ්‍ය නොවේ. දිනය ගණිතය ක්‍රියාත්මක වන්නේ මේ නිසා ය. IMHO ...
ජෙරාඩ් ඔනිල්

770

නිවැරදි පිළිතුර :

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

වැරදි පිළිතුර :

මෙම පිළිතුර සමහර විට නිවැරදි ප්‍රති result ලබා දෙන නමුත් බොහෝ විට වැරදි වර්ෂය සහ මාසය ලබා දෙයි. මෙම පිළිතුර ක්‍රියාත්මක වන එකම අවස්ථාව වන්නේ ඔබ දින එකතු කරන දිනය වත්මන් වර්ෂය සහ මාසය ඇති වූ විට පමණි.

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

සාධනය / උදාහරණය

මෙම JsFiddle පරීක්ෂා කරන්න


zbzlm, ඔව් අත්‍යවශ්‍යයෙන්ම එයමයි. එය දිනය මූලාකෘතිය වෙනස් නොකරයි. ප්‍රධාන පිළිතුරේ ඇති අඩුපාඩු පෙන්වා දීමට ද මට අවශ්‍ය විය.
අමතර කොටස්

පිළිගත් පිළිතුර දෙසතියකට පෙර සංස්කරණය කරන ලද්දේ එහි අඩුපාඩු පෙන්වා දීම සඳහා ය. එය තවදුරටත් සංස්කරණය කිරීම අවශ්‍ය යැයි ඔබ සිතනවාද? එසේ නම්, කෙසේද?
bzlm

7
zbzlm: ඔව්, සටහන කියවිය යුතු යැයි මම විශ්වාස කරමි "'සිට' දිනය වර්තමාන දිනය මෙන් එකම වර්ෂයේ හෝ මාසයේ නොමැති නම් මෙම ප්‍රවේශය අසාර්ථක වේ ". පරිශීලකයින් පිළිතුර දෙස බලා අනතුරු ඇඟවීම කැපී පෙනෙන බැවින් එය කියවන්නේ නැති බව මම තවමත් කණගාටු වෙමි. ස්තූතියි.
අමතර කොටස්

3
මම හිතන්නේ, මෙම කාර්යය වුවද එය නිවැරදි නොවේ. දිනය සඳහා එවැනි ඉදිකිරීම්කරුවෙකු නොමැත: var result = නව දිනය (දිනය); , http://www.w3schools.com/js/js_dates.asp බලන්න . මෙය සාමාන්‍යයෙන් ක්‍රියාත්මක වුවද, සමහර විට නූල් බවට පරිවර්තනය වීම සහ අනෙක් අතට වැරදි ප්‍රති results ල ඇති විය හැකිය. එය var result = නව දිනය (date.getTime ()) විය යුතුය;
මාකින්

2
N ඇන්කිට් බාලියන්, වෙනත් පිළිතුරු බලන්න. දිවා ආලෝකය ඉතිරි කිරීමේ වේලාව නිසා එය නිවැරදිව ක්‍රියා නොකරනු ඇත
අමතර කොටස්

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

මෙය උපක්‍රමශීලී විය හැකි බැවින් ප්‍රවේශම් වන්න. "හෙට" සැකසීමේදී, එය ක්‍රියාත්මක වන්නේ එහි වර්තමාන වටිනාකම "අද" සඳහා වසර හා මාසයට ගැලපෙන බැවිනි. කෙසේ වෙතත්, සාමාන්‍යයෙන් "32" වැනි දින අංකයකට සැකසීම එය ඊළඟ මාසයට ගෙනයාමට තවමත් හොඳින් ක්‍රියා කරයි.


1
ඔව්? නමුත් මෙය කුමක්ද? (2010 මාර්තු 31 දින ධාවනය විය): අද = නව දිනය (); හෙට = නව දිනය (); හෙට.සෙට් දිනය (අද.ජෙට් දිනය () + 1); ඇඟවීම් (හෙට.ජෙට් මාසය ()); "3" පවසයි. අනතුරු ඇඟවීම (හෙට); හරි ... ඇයි ???
d -_- b

13
සිම්ස් මාසය 0 සුචිගත කර ඇත. 3 වන මාසය අප්‍රේල්
ජොයෙල් කොහූර්න්

7
වෙනම දින වස්තු 2 ක් සෑදීමේ අවශ්‍යතාවය ඇයි? එකම දින වස්තුව සරලව භාවිතා නොකරන්නේ ඇයි : var d = new Date(); d.setDate( d.getDate() + 1 );?
ජෝශප් සිල්බර්

8
මෙම ප්‍රවේශය වසර ගණනාවක් පුරා ක්‍රියාත්මක නොවේ. ඔබගේ ආරම්භක දිනය මීට වසර කිහිපයකට පෙර සිට නම්, එම වර්ෂයේ දිනයgetDate() ආපසු එවන්න . ඉන්පසු, ඇමතුම වත්මන් වර්ෂයේ දිනය නියම කරයි . ඒ නිසා එය නැති හොඳ සාමාන්ය විසඳුමක්. @ ඇන්තනි ඩබ්ලිව් ජෝන්ස්ගේ පිළිතුර ඇත්ත වශයෙන්ම නිවැරදිව ක්‍රියා කරයි. setDate
ඩ්‍රූ නොක්ස්

3
@ DrewNoakes years එය වසර ගණනාවක් පුරා ක්‍රියාත්මක නොවන බවට ඔබ කරන ප්‍රකාශය වැරදිය. getDate "එම වර්ෂයේ දිනය" නොව මාසයේ දිනය නැවත ලබා දෙයි. උදා: var d = new Date(2015,11,30);d.setDate(d.getDate() + 370)වසර 2 ක් ඉක්මවන 2017 ජනවාරි 3 ලබා දෙයි.
RobG

127

මගේ සරල විසඳුම:

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 ට නැවත සකසයි (ගැටළුවක් විය හැකිය හෝ නැත)
ඇල්වාරෝ ගොන්සාලෙස්

ඔබ පවසන පරිදි කිසිදු මාසයක අවසාන දිනයේ වැඩ නොකරයි. අවුරුද්දේ දින 12 තුළ මෙය භාවිතා කළ නොහැක. නිදොස් කිරීම බියකරු සිහිනයක් මෙන් පෙනේ !!!
ඩ්‍රූ නොක්ස්

6
ඩ්‍රූ නැත, එය අවුරුද්දේ සෑම දිනකම භාවිතා කළ හැකිය. ඔබට දිනය ඕෆ්සෙට් 31 ට වඩා විශාල හෝ මාස ඕෆ්සෙට් 12 ට වඩා විශාල කළ හැකි අතර මෙම ශ්‍රිතය එය ලබන මාසයේ හෝ ඊළඟ වසරේ මාසය ලෙස නැවත ගණනය කරනු ඇත. උදාහරණයක් ලෙස: nextday = නව දිනය (oldDate.getFullYear (), oldDate.getMonth (), oldDate.getDate () + 40); හොඳින් කේතය.
sbrbot

getMonth () + 22 ඇත - එය ක්‍රියාත්මක වනු ඇතැයි ඔබ සිතන දේ!
sbrbot

1
මම එකඟයි, මේ ආකාරයෙන් භාවිතා කරන්න. දිවා කාලයේ ඉතිරි කිරීමේ කාලය නිසා අපට දෝෂයක් ඇතිවිය setDate.
ජෙලේ

100

මෙම පිළිතුරු මට ව්‍යාකූල බවක් පෙනේ, මම කැමතියි:

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

getTime () අපට 1970 සිට මිලි තත්පර ලබා දෙන අතර 86400000 යනු දිනකට මිලි තත්පර ගණනයි. එබැවින්, අපේක්ෂිත දිනය සඳහා ms මිලි තත්පර අඩංගු වේ.

මිලි තත්පර ඉදිකිරීම්කරු භාවිතා කිරීමෙන් අපේක්ෂිත දින වස්තුව ලබා දෙයි.


46
මෙම විසඳුම දිවා ආලෝකය ඉතිරි කිරීම සැලකිල්ලට නොගනී. උදාහරණයක් ලෙස, මෙය පැය 23 කට පසුව එම දිනයම නැවත ලබා දෙනු ඇත: new Date(new Date('11/4/2012').getTime() + 86400000)
නෝවා හැරිසන්

6
O නෝවාමිලර් ඔබ ගෙන එන ගැටලුව දෝෂයක් නොව අංගයක් විය හැකිය! ඩීඑස්ටී මත පදනම්ව ලැබෙන කාලය දැන ගැනීමේ අරමුණ ඇතිව දිනකට පැය 24 ක් එකතු කිරීම සමහර විට නිවැරදි දෙය වේ. ඔබගේ උදාහරණ ආපසු එන දිනය නොවැම්බර් 4 වන දින රාත්‍රී 11 ට වේ. එය එම දිනයේ පැය 24 කට පසුව වේ. මුල් පෝස්ටරය දිවා කාලය ගැන විමසූ අතර එය දවසේ නිවැරදි වේලාවන් සඳහා යම් ආශාවක් පෙන්නුම් කරයි. ඔබේ ඉලක්කය පැය 24 කට පසුව වේලාව වන විට ඔබ සිටින්නේ නම් මෙම පිළිතුර නිවැරදි ය.
ඇන්ඩි නොවොසින්

3
මම නෝවාට එකඟ වෙමි, var d2 = නව දිනය (d1.valueOf () + 24 * 60 * 60 * 1000) එය පවසන දේ කරයි, දිනයකට කිනිතුල්ලන් සඳහා සම්පූර්ණ දවසක් එකතු කරයි.
කොරී ඇලික්ස්

6
සමහර අවස්ථාවන් සඳහා මෙය නියත වශයෙන්ම නිවැරදි වේ (නිදසුනක් ලෙස දින 1 කුකීස් සඳහා) සහ අනෙක් ඒවාට වඩා සරල විසඳුමක්. එයට මෙතරම් පහත් අගයන් සහ
ඉහළ නැගීම්

49

උත්සාහ කරන්න

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

ඔබගේ ගැටළුව විසඳන්නේ නැති දිනයක් එකතු කිරීමට setDate () භාවිතා කරමින්, පෙබරවාරි මාසයකට දින කිහිපයක් එකතු කිරීමට උත්සාහ කරන්න, ඔබ එයට නව දින එකතු කිරීමට උත්සාහ කරන්නේ නම්, එය ඔබ අපේක්ෂා කළ දෙයට ප්‍රති result ල නොලැබේ.


26
නැත, මෙය නිවැරදි පිළිතුර ලෙස සලකුණු නොකළ යුතුය, මන්ද මෙම විසඳුම සෑම දිනකම තත්පර 24 * 60 * 60 * 1000 ක් ඇති බව උපකල්පනය කරන නමුත් එය (දිවා ආලෝකය ඉතිරි කිරීම) සිදු නොවේ!
sbrbot

'පෙබරවාරි' ගැටලුව පිළිබඳ සාක්ෂි setDate()තිබේද? එය මෙයද: stackoverflow.com/questions/5497637/…
බ්‍රෙන්ට් බ්‍රැඩ්බර්න්

9
+1 මෙය නිවැරදි පිළිතුර ලෙස සලකුණු කළ යුතුය. "දිවා ආලෝකය සුරැකීම" ඉදිරිපත් කිරීම ගැන මිස වටිනාකම ගැන නොවන බව මම විශ්වාස කරමි , එය මිලි තත්පර ගණනකි. සිට අගය මතය -point - අනුව දිවා කාලයේ, millisecs ක CONST අංකය ඉදිරිපත් එය වෙනස් විය හැක.
අපකීර්තියට පත්

1
@ disfated - මෙය නිවැරදි පිළිතුර නොවේ. දිවා ආලෝකය ඉතිරි කිරීමේ දිනයට පැය 25 ක් ඇත, නමුත් මෙම ක්‍රමය එකතු කරන්නේ 24 ක් පමණි, එබැවින් දිනය සමාන වේ. දිනක් නිරූපණය කිරීම සඳහා පැය 24 ක් භාවිතා කිරීම UTC ක්‍රම භාවිතා කරන්නේ නම් ක්‍රියා කරයි, නමුත් setDate භාවිතා කිරීම වඩාත් පහසු වන්නේ ඇයි? ;-)
RobG

38

පහත දැක්වෙන ඊයම් උදාහරණ අනුගමනය කිරීමේදී එකතු නොකිරීමේ වසර සමඟ ගනුදෙනුව කුමක් දැයි සොයා බැලීමට අවුරුදු ගණනාවක් ගත කර ඇත.

ඔබට ඇති දිනට දින n ක් සරලව එකතු කිරීමට අවශ්‍ය නම් ඔබට යන්න වඩාත් සුදුසුය:

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 භාවිතා කරන්න . ජාවාස්ක්‍රිප්ට්හි ඉතා හොඳ ස්වදේශීය දිනය / වේලාවන් නොමැත. පහත දැක්වෙන්නේ Moment හි වාක්‍ය ඛණ්ඩයයි:

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/#/manipulat/add/


1
p kpull1 බිල්ට් විසඳුමක් තිබේදැයි විමසීමෙන් අසන්නා විසඳුම් වසම සීමා කළේ නැත.
user2910265

4
නවීන සටහන: එවැනි කුඩා අරමුණක් සඳහා එකතු කිරීමට Moment.js ඇදහිය නොහැකි තරම් බරයි. එය සිය ගණනක් KB වන අතර එය වෙබ් පැක් හිතකාමී නොවේ.
ජෝෂුවා කොමාවෝ

1
අප කැමති පුස්තකාලය දිනය- fns වේ. වෙබ් පැක්-හිතකාමී, වේගවත්, සහ දිනයන් වෙනස් කළ නොහැකි ලෙස සලකයි.
Freewalker

1
Uc ලූක්විලියම්ස් මේ දක්වා දිනය-එෆ්එන්එස් ගැන අසා නැත. එය පරීක්ෂා කරනු ඇත. ස්තූතියි.
user2910265

2
Os ජොෂුවාකොමෝ ඔබ එය 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);

කෝඩ්පෙන්

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 ක් නොමැත, එය ඩීඑස්ටී සහ පිම්ම තත්පරයට අසමත් වේ.
ස්ටීවන්

19

මම ඊයේ රාත්‍රියේ මෙම දිගු නිර්මාණය කළෙමි:
ඔබට ධනාත්මක හෝ negative ණාත්මක අගයන් සමත් විය හැකිය;

උදාහරණයක්:

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
.AddDays () ක්‍රමය දිවා ආලෝකය ඉතිරි කිරීමේ කාල සීමාවන් ඉක්මවා යන දිනයන් සඳහා ක්‍රියා නොකරයි.
mskfisher

1
මෙය මෙහි වඩා හොඳ පිළිතුරකි, මන්ද ඔබ (නිවැරදිව) යුගයේ සිට දින ගණන / වේලාවන් නිරූපණය කිරීම සඳහා මිලි ගණන භාවිතා කිරීම සහ ගැලපීම් සඳහා මිලි ප්‍රමාණයක් එකතු කිරීම නිසාය ... එසේනම් ඔබ මෙය "addMonths" සඳහා තබා නොගත්තේ ඇයි! ? අමතර වසරක් නැත්තේ ඇයි? ඔබ කම්මැලියිද?
රොබින්

මාස හැරුණු විට, කාල සීමාවන් ස්ථිතික සංඛ්‍යා මගින් නිරූපණය කළ හැකිය. නමුත් මාස විවිධ දිග හතරක් විය හැකිය. එසේම, දින හා ඊට වැඩි ඕනෑම කාල පරාසයක් DST හි විචල්‍ය දිගක් තිබිය හැක, එබැවින් ඔබට තවත් මට්ටමේ සංකීර්ණතාවයකින් තොරව කාලය මත පදනම් වූ එකතු කිරීමක් භාවිතා කළ නොහැක. මම addYears () එකතු කළ අතර, මම addMonths () සවි කළෙමි.
Suamere

14

දෙවන විචල්‍යය භාවිතා නොකර, ඔබේ ඊළඟ දින x සමඟ 7 ක් ආදේශ කළ හැකිය:

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

14

දින 30 ක භාවිතය ආදේශ කිරීමට (24h = 86400000ms)

new Date(+yourDate - 30 *86400000)


දිනය ගණනය කිරීමට උත්සාහ කරන විට පරිගණක විද්‍යාවේ මිලි තත්පර මත පදනම්ව එම දිනය මතක තබා ගන්න, ( en.wikipedia.org/wiki/System_time#Retrieving_system_time ) නව දිනය (+ ඔබේ දිනය + 30 * (24 * 60 * 60 * 1000))
අෂ්රෆ් අබුසාඩා

14

නල මාර්ග ක්‍රියාකරු සඳහා නිර්මාණය කර ඇති විසඳුමක් :

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

ඔබට තවත් ක්‍රියාකාරීත්වයක් අවශ්‍ය නම්, දිනය-එෆ්එන්එස් පුස්තකාලය සොයා බැලීමට මම යෝජනා කරමි .


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


මම හිතන්නේ මෙය හොඳම විසඳුමයි. අපි දින පංතිය දීර් ing කරන්නේ නම්, දිනය උදාහරණයම යාවත්කාලීන වන බව වඩා හොඳ තේරුමක් ඇත.
පෝර්ලූන්

11

සාදයට ප්‍රමාදයි, නමුත් ඔබ භාවිතා කරන්නේ jQueryනම් මොහොත නමින් විශිෂ්ට ප්ලගිනයක් තිබේ:

http://momentjs.com/

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

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

එහි තවත් හොඳ දේවල් ගොඩක්!

සංස්කරණය කරන්න: අයිකෙරුගේ ප්‍රකාශයට ස්තූතියි jQuery යොමු කිරීම ඉවත් කරන ලදි


2
මොහොතට jQuery අවශ්‍ය නොවේ :)
aikeru

ඊටත් වඩා හොඳයි !!
RemarkLima

1
ඔව්, ප්ලේන් ඔල් ජේඑස් සමඟ වැඩි වේලාවක් ගත කිරීමෙන් පසුව, මම මොහොත භාවිතා කළෙමි, එය ක්‍රියාත්මක වේ (ටීඑම්)!
caseyamcl

JS පේළි කිහිපයක් කරන විට ඔබට ප්ලගිනය භාවිතා කිරීමට අවශ්‍ය ඇයි?
ප්‍රංශ ජාතික

1
renfrenchie මොකද, JS හි පේළි කිහිපයක් ලෙස ආරම්භ වන දේ සහ ඔබේ යෙදුම දින, දිනයන් සහ වේලාව හා සම්බන්ධ තොරතුරු හසුරුවන හෙයින්, එය ඉතා ඉක්මණින් JS පේළි 1000 ක් වනු ඇත, එවිට යෙදුම හරහා දේශීයකරණය කිරීමට ඔබෙන් අසනු ඇත. භාෂා සහ කාල
කලාප

10

අපේක්ෂිත පරිදි ක්‍රියාත්මක වන ඔබගේ පිළිතුරට ස්තූතියි ජේසන්, මෙන්න ඔබේ කේතයෙන් සහ ඇන්තනි ඩබ්ලිව් ජෝන්ස්ගේ හැඩතලයෙන් මිශ්‍ර වීමකි:

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

6
දිනකට තත්පර 86400000 ට වඩා අඩු හෝ අඩු කාලයක් ඇති විට එය දිවා ආලෝකය ඉතිරි කිරීම සැලකිල්ලට නොගන්නා අතර ඔබේ කේතයේ තාර්කික දෝෂ (වැඩසටහන් දෝෂ) ඇති විය හැක.
sbrbot

සමහර විට එය අවශ්ය වේ. ඊ බේ ඒපීඅයි හි පැය 24 පදනම් කරගත් එක්ස්-දින වෙන්දේසි ඇත, එබැවින් ඩීඑස්ටී තත්ත්වය මැද වෙන්දේසිය වෙනස් වුවහොත් ඔබේ අයිතමය ඉහළ යන කාලයට වඩා වෙනස් වේලාවක අවසන් වේ. එවැනි අවස්ථාවකදී තාර්කික දෝෂ මඟහරවා ගැනීම සඳහා ඔබ මෙම ආකාරයේ ශ්‍රිතයක් භාවිතා කළ යුතුය.
ඇන්ඩි නොවොසින්

8

පැරණි මම දනිමි, නමුත් සමහර විට මම මේකට කැමතියි:

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

2
මෙය මට වඩාත්ම අර්ථවත් කරයි. එය සරල, අලංකාර වන අතර මාස / අවුරුදු ගණනක් පුරා චලනය වන ගැටළු වලට යාච් pray ා නොකරයි.
uadrive

1
ඉදිරිපත් කළ සරලම පිළිතුර. මේ මත පදනම්ව, 'addDays' මූලාකෘතිය පහත පරිදි වේ:Date.prototype.addDays = function(days) {return new Date(this.getTime() + (864e5 * days));};
CrazyIvan1974

සෑම දිනකම පැය 24 ක් නොමැත, එය ඩීඑස්ටී සහ පිම්ම තත්පරයට අසමත් වේ.
ස්ටෙෆාන්

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

ඔබට JavaScript භාවිතා කළ හැකිය, 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);
}

8

මේ තරම් සරලයි:

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

2
මෙය UTC දින එකතු කරන අතර, එය දේශීය ක්‍රම භාවිතා කරන අතර පැය 24 ක් දිගු නොවන දේශීය දිනවලට ඉඩ නොදේ, එය කාල කලාපය ඕෆ්සෙට් වෙනස් වන විට සිදු වේ (උදා: දිවා ආලෝකය ඉතිරි කිරීම සහ පිටත).
රොබ්

7

SetDate () සඳහා වන මොසිල්ලා ලියකියවිලි එය මාසය අවසානයේදී හැසිරවිය හැකි බව දක්වන්නේ නැත. බලන්නHttps://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date

setDate ()

  • දේශීය වේලාව අනුව නිශ්චිත දිනයක් සඳහා මාසයේ දිනය (1-31) නියම කරයි.

මට දින එකතු කිරීමට අවශ්‍ය වූ විට මම setTime () භාවිතා කරන්නේ එබැවිනි.


මම ECMAScript ලියකියවිලි සමඟ සම්බන්ධ කරමි, නමුත් ඒවා PDF වලින් මුදා හරිනු ලැබේ; (
බ්ලේක් මිල්ස්

1
නැවත " setDate () සඳහා මොසිල්ලා ලියකියවිලි එය මාසය අවසානයේදී හැසිරවිය හැකි බව දක්වන්නේ නැත ". "ලියකියවිලි" යාවත්කාලීන කර ඇති බැවින් දැන් ඒවා සිදු වේ. ;-)
RobG

7

මම හිතන්නේ මමත් පිළිතුරක් දෙන්නම්:
පුද්ගලිකව, අනවශ්‍ය විචල්‍ය ප්‍රකාශයන්, ක්‍රම ඇමතුම් සහ ඉදිකිරීම්කරුවන්ගේ ඇමතුම් වළක්වා ගැනීමට උත්සාහ කිරීමට මම කැමතියි. (හේතුව අනුව, ඇත්ත වශයෙන්ම)
මම මෙය ඇන්තනි ඩබ්ලිව් ජෝන්ස් දුන් පිළිතුර යටතේ අදහස් දැක්වීමක් ලෙස තබමි.

// 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;
};

ඉහත සඳහන් කරුණු DST ට ගරු කරනු ඇත. තේරුම ඔබ ඩීඑස්ටී තරණය කරන දින කිහිපයක් එකතු කළහොත්, එය පිළිබිඹු වන පරිදි දර්ශනය වන කාලය (පැය) වෙනස් වේ.
උදාහරණය:
2014 නොවැම්බර් 2 02:00 ඩීඑස්ටී හි අවසානය විය.

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

7

නැත, ජාවාස්ක්‍රිප්ට් තුළ කිසිදු ක්‍රියාකාරීත්වයක් නොමැත, නමුත් ඔබට සරල කේත රේඛාවක් භාවිතා කළ හැකිය

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

5

ජාවාස්ක්‍රිප්ට් හි මූලාකෘති දීර් ing කිරීම හොඳ අදහසක් නොවනු ඇත , විශේෂයෙන් වෘත්තීය කේත පදනම් වල.

ඔබට කිරීමට අවශ්‍ය වන්නේ ස්වදේශීය Dateපන්තිය දීර් extend කිරීමයි :

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ක්‍රමයක් ක්‍රියාත්මක කරන්නේ නම් , ඔබ කිසිවක් බිඳ නොදමනු ඇත.


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

දිනය සඳහා int එකක් පිළිගන්නා ඉදිකිරීම්කරුවෙකු ඇත. මෙම තර්කය 1970 ජනවාරි 1 ට පෙර / පසු මුළු මිලි තත්පර නියෝජනය කරයි. එයට නව කාල වස්තුවක් නිර්මාණය නොකර එයම කරන සෙට් ටයිම් ක්‍රමයක් ද ඇත.

අප මෙහි කරන්නේ දින මිලි තත්පර බවට පරිවර්තනය කර getTime විසින් සපයන ලද අගයට මෙම අගය එකතු කිරීමයි. අවසාන වශයෙන්, අපි ප්‍රති result ලය දිනය (මිලි තත්පර) ඉදිකිරීම්කරු හෝ සෙට් ටයිම් (මිලි තත්පර) ක්‍රමයට ලබා දෙමු.


සෑම දිනකම පැය 24 ක් නොමැත, එය ඩීඑස්ටී සහ පිම්ම තත්පරයට අසමත් වේ.
ස්ටීවන්

ස්ටීවන්, ඒ සඳහා වෙනත් පුස්තකාල ගිණුමක් තිබේද?
වක්තං

now.setDate(now.getDate() + days);DST වෙනස්කම් ස්වයංක්‍රීයව හසුරුවයි. මම නිවැරදි කළ යුතුයි, පිම්ම තත්පර JS කාලරාමුවල නොසලකා හරිනු ලැබේ.
ස්ටෙෆාන්

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

( මෙම ෆෙඩල් ද බලන්න )

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.