2012-06-07 11 views
63

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

दिनांक प्रारूप में हैं: "mm/dd/yyyy"। मैं चाहता हूं कि वे "अगला" बटन पर क्लिक करने में सक्षम हों, और यदि दिनांक है: "06/01/2012" फिर अगला क्लिक करने पर, यह होना चाहिए: "06/02/2012"। यदि वे 'पिछला' बटन क्लिक करते हैं तो यह "05/31/2012" बनना चाहिए।

यह लीप वर्ष का ट्रैक माह के दिनों की संख्या रखने की जरूरत है, आदि

कोई भी विचार?

पीएस सर्वर से तारीख प्राप्त करने के लिए AJAX का उपयोग करना एक विकल्प नहीं है, यह थोड़ा सा है और क्लाइंट चाहता है कि उपयोगकर्ता के लिए अनुभव नहीं है।

+1

यदि आप डेटपिकर का उपयोग कर रहे हैं। फिर 'dateValue = $ .datepicker.parseDate (" mm/dd/yy ", '06/01/2012 ');' dateValue.setDate (dateValue.getDate() + 1); ' –

उत्तर

83

कोड:

var date = new Date('2011','01','02'); 
alert('the original date is '+date); 
var newdate = new Date(date); 

newdate.setDate(newdate.getDate() - 7); // minus the date 

var nd = new Date(newdate); 
alert('the new date is '+nd);​ 

JSFiddle Demo

Datepicker का उपयोग:

$("#in").datepicker({ 
    minDate: 0, 
    onSelect: function(dateText, inst) { 
     var actualDate = new Date(dateText); 
     var newDate = new Date(actualDate.getFullYear(), actualDate.getMonth(), actualDate.getDate()+1); 
     $('#out').datepicker('option', 'minDate', newDate); 
    } 
}); 

$("#out").datepicker();​ 

JSFiddle Demo

अतिरिक्त सामान है कि काम में आ सकता है:

getDate() Returns the day of the month (from 1-31) 
getDay() Returns the day of the week (from 0-6) 
getFullYear() Returns the year (four digits) 
getHours() Returns the hour (from 0-23) 
getMilliseconds() Returns the milliseconds (from 0-999) 
getMinutes() Returns the minutes (from 0-59) 
getMonth() Returns the month (from 0-11) 
getSeconds() Returns the seconds (from 0-59) 

अच्छा लिंक:MDN Date

+0

क्यों एक तीसरी नई तारीख बनाएं : var nd = नई तिथि (newdate) ?? दिनांक वस्तु, newdate, जैसा कि .setDate द्वारा समायोजित किया गया है ठीक है, है ना? –

+0

@ केविन एम हाँ, इस उद्देश्य पर निर्भर करता है ताकि 'nd' नई तारीख 'var' स्पष्टता के लिए बनाई गई हो! ':)' –

1

आप तारीखों का ट्रैक रखने के लिए मूल जावास्क्रिप्ट दिनांक वस्तु का उपयोग कर सकते हैं। यह आपको वर्तमान तिथि देगा, आपको कैलेंडर विशिष्ट सामानों का ट्रैक रखने और यहां तक ​​कि विभिन्न टाइमज़ोन प्रबंधित करने में आपकी सहायता करने दें। आप जिस तारीख के साथ काम कर रहे हैं या नई तिथियों की गणना करने के लिए दिन/घंटे/सेकंड जोड़ और घटा सकते हैं।

अधिक जानने के लिए इस वस्तु संदर्भ पर एक नज़र डालें:

Date

आशा है कि मदद करता है!

14
startdate.setDate(startdate.getDate() - daysToSubtract); 


startdate.setDate(startdate.getDate() + daysToAdd); 
4

हो सकता है यह मदद कर सकता है

<script type="text/javascript" language="javascript"> 
     function AddDays(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() + parseInt(toAdd)); 

      document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); 
     } 

function SubtractDays(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() - parseInt(toAdd)); 

      document.getElementById("result").innerHTML = d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear(); 
     } 
    </script> 
    ---------------------- UI --------------- 
     <div id="result"> 
     </div> 
     <input type="text" value="0" onkeyup="AddDays(this.value);" /> 
     <input type="text" value="0" onkeyup="SubtractDays(this.value);" /> 
6

जावास्क्रिप्ट Date वस्तु यहां कर सकते हैं।

पहला चरण उन तारों को Date उदाहरणों में परिवर्तित करना है। यह आसानी से किया जाता है:

var str = "06/07/2012"; // E.g., "mm/dd/yyyy"; 
var dt = new Date(parseInt(str.substring(6), 10),  // Year 
        parseInt(str.substring(0, 2), 10) - 1, // Month (0-11) 
        parseInt(str.substring(3, 5), 10)); // Day 

फिर आप सभी प्रकार की उपयोगी गणना कर सकते हैं। जावास्क्रिप्ट तिथियां लीप साल और इस तरह समझती हैं। वे "दिन" की आदर्शीकृत अवधारणा का उपयोग करते हैं जो बिल्कुल 86,400 सेकंड लंबा है। उनके अंतर्निहित मूल्य द एपोक (आधी रात, 1 जनवरी, 1 9 70) के बाद मिलीसेकंड की संख्या है; यह युग से पहले तिथियों के लिए एक नकारात्मक संख्या हो सकता है।

MDN page on Date पर अधिक।

तुम भी MomentJS की तरह एक पुस्तकालय का उपयोग, जो पार्सिंग के साथ में मदद मिलेगी, तिथि गणित कर रही है, स्वरूपण पर विचार हो सकता ...

+4

तारीखों के साथ सामान नहीं है। बस moment.js का उपयोग करें और अपने बालों को बचाओ। –

3

जावास्क्रिप्ट में दिनांक के साथ कार्य करना हमेशा परेशानी का एक सा है। मैं हमेशा पुस्तकालय का उपयोग कर समाप्त होता हूं। Moment.js और XDate दोनों महान हैं:

http://momentjs.com/

http://arshaw.com/xdate/

फिडल:

http://jsfiddle.net/39fWa/

var $output = $('#output'), 
    tomorrow = moment().add('days', 1); 

$('<pre />').appendTo($output).text(tomorrow); 

tomorrow = new XDate().addDays(-1); 

$('<pre />').appendTo($output).text(tomorrow); 

+0

मैंने कई बार देखा है जब moment.js दिनांक अंतराल (diff) के दौरान महीनों की अमान्य संख्या की गणना करता है - उदाहरण के लिए, 13 फरवरी, 2014 और 15 मार्च, 2016 की तिथियों के बीच - moment.js रिपोर्ट करेगा कि 26 हैं महीने जब किसी भी प्रकार की तिथि या डेटटाइम कक्षाओं में निर्मित अधिकांश भाषाएं 25 के समान अंतराल की रिपोर्ट करती हैं। XDate उस अंतराल को सही तरीके से गणना करता है। – AndrewPK

4
//In order to get yesterday's date in mm/dd/yyyy. 


function gimmeYesterday(toAdd) { 
      if (!toAdd || toAdd == '' || isNaN(toAdd)) return; 
      var d = new Date(); 
      d.setDate(d.getDate() - parseInt(toAdd)); 
var yesterDAY = (d.getMonth() +1) + "/" + d.getDate() + "/" + d.getFullYear(); 
$("#endDate").html(yesterDAY); 
     } 
$(document).ready(function() { 
gimmeYesterday(1); 
}); 

आप यहां कोशिश कर सकते हैं: http://jsfiddle.net/ZQAHE/

1

तिथि जोड़ने के लिए ये सभी कार्य गलत हैं। आप गलत कार्य को डेट फ़ंक्शन में पास कर रहे हैं। समस्या के बारे में अधिक जानकारी: http://www.domdigger.com/blog/?p=9

32

आप getTime() और setTime() उपयोग करने के लिए जोड़ सकते हैं या एक जावास्क्रिप्ट दिनांक वस्तु में समय घटाना करने के लिए की जरूरत है। setDate() और getDate() का उपयोग करते हुए जब महीने 1, 30, 31, आदि की सीमा तक पहुंच गया त्रुटियों को बढ़ावा मिलेगा ..

setTime का उपयोग करके आप एक मिलीसेकेंड में ऑफसेट सेट करने के लिए अनुमति देता है, और दिनांक वस्तु आंकड़ा आराम करते हैं:

var now=new Date(); 
var yesterdayMs = now.getTime() - 1000*60*60*24*1; // Offset by one day; 
now.setTime(yesterdayMs); 
+2

यह एकमात्र समाधान है जो मेरे लिए काम करता है। डेट इंडेक्स दिन सूचकांक के लिए ऋणात्मक संख्या का उपयोग होने पर अजीब तरीके से व्यवहार करता प्रतीत होता है। मुझे यह हल करने का एकमात्र तरीका मिल गया था मिलीसेकंड के साथ सीधे काम करना था –

+0

बेस्ट सोल्यूशन! सेटडेट का उपयोग करने वाले सभी अन्य समाधानों को डाउनवॉटेड किया जाना चाहिए ... मुझे बहुत परेशानी हो सकती है ... – abimelex

+0

Ditto। यह सबसे स्वच्छ और अधिक विश्वसनीय समाधान है। धन्यवाद @ डेकास्टेलजौ – GR7

2

जिस तरह से मुझे पसंद है, यह है कि यदि आपके पास डेट ऑब्जेक्ट है तो आप अंतर प्राप्त करने के लिए इससे किसी अन्य दिनांक वस्तु को घटा सकते हैं। दिनांक वस्तुएं एक निश्चित तारीख से मिलीसेकंड पर आधारित होती हैं।

var date1 = new Date(2015, 02, 18); // "18/03/2015", month is 0-index 
var date2 = new Date(2015, 02, 20); // "20/03/2015" 

var msDiff = date2 - date1; // 172800000, this is time in milliseconds 
var daysDiff = msDiff/1000/60/60/24; // 2 days 

तो इस प्रकार आप तिथियों को घटाते हैं। अब अगर आप उन्हें जोड़ना चाहते हैं? DATE1 + DATE2 त्रुटि देता .. लेकिन मैं उपयोग कर सकते हैं अगर मैं एमएस में समय प्राप्त करना चाहते हैं:

var dateMs = date1 - 0; 
// say I want to add 5 days I can use 
var days = 5; 
var msToAdd = days * 24 * 60 * 60 * 1000; 
var newDate = new Date(dateMs + msToAdd); 

0 घटाकर करके आप मिलीसेकेंड प्रारूप में दिनांक वस्तु बदल जाते हैं।

0

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

HTML:

<label>Date:</label><input name="date" id="dateChange" type="date"/> 
<input id="SubtractDay" type="button" value="-" /> 
<input id="AddDay" type="button" value="+" /> 

जावास्क्रिप्ट:

var counter = 0; 

$("#SubtractDay").click(function() { 
    counter--; 
    var today = new Date(); 
    today.setDate(today.getDate() + counter); 
    var formattedDate = new Date(today); 
    var d = ("0" + formattedDate.getDate()).slice(-2); 
    var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); 
    var y = formattedDate.getFullYear(); 
    $("#dateChange").val(d + "/" + m + "/" + y); 
}); 
$("#AddDay").click(function() { 
    counter++; 
    var today = new Date(); 
    today.setDate(today.getDate() + counter); 
    var formattedDate = new Date(today); 
    var d = ("0" + formattedDate.getDate()).slice(-2); 
    var m = ("0" + (formattedDate.getMonth() + 1)).slice(-2); 
    var y = formattedDate.getFullYear(); 
    $("#dateChange").val(d + "/" + m + "/" + y); 
}); 

jsfiddle

0
var date = new Date('your date string here'); // e.g. '2017-11-21' 

var newdate = new Date(date.getTime() + 24*60*60*1000 * days) // days is the number of days you want to shift the date by 

यह एकमात्र समाधान है कि मज़बूती से काम करता है/जब जोड़ने महीनों और वर्षों में घटाकर है। महीने/वर्ष शिफ्ट के लिए समायोजित करने की कोशिश कर, GetDate और setDate विधियों के साथ मिलकर बहुत अधिक समय व्यतीत करने के बाद इसे महसूस किया।

decasteljau (इस धागे में) ने पहले से ही इसका उत्तर दिया है, लेकिन इस विधि की उपयोगिता पर जोर देना चाहते हैं क्योंकि 9 0% उत्तर वहां GetDate और setDate दृष्टिकोण की अनुशंसा करते हैं।

संबंधित मुद्दे