दो तिथियों के बीच दिनों की संख्या की गणना कैसे करें


282

मेरे पास डेट पिकर नियंत्रण से दो इनपुट दिनांक हैं। मैंने प्रारंभ दिनांक 2/2/2012 और अंतिम तिथि 2/7/2012 को चुना है। मैंने उसके लिए निम्नलिखित कोड लिखा है।

मुझे 6 के रूप में परिणाम मिलना चाहिए लेकिन मुझे 5 मिल रहे हैं।

function SetDays(invoker) {   
    var start = $find('<%=StartWebDatePicker.ClientID%>').get_value();
    var end = $find('<%=EndWebDatePicker.ClientID%>').get_value();

    var oneDay=1000 * 60 * 60 * 24;
    var difference_ms = Math.abs(end.getTime() - start.getTime())
    var diffValue = Math.round(difference_ms / oneDay);
}

क्या कोई मुझे बता सकता है कि मुझे सटीक अंतर कैसे मिल सकता है?


आपको परिणाम क्यों मिलना चाहिए = 6 ??? ० .... - ०२ = ०५ दिन ....
आंद्रे अलाका पाडेज़

1
लेकिन 2 से 7 दिनों की सीमा 2,3,4,5,6,7 = 6 दिन है।
सुपर

अंतर लेते हुए मैं प्रारंभ तिथि पर भी विचार करना चाहता हूं ....
वैभव देशमुख

17
खैर ... क्यों नहीं सिर्फ 1 उत्तर में जोड़ें?
नुकीले

समस्या (यदि कोई समस्या है) कार्यात्मक है, न कि तकनीकी। @ टिप्पणी टिप्पणी का उत्तर है। इसलिए कुछ लोग पूछते हैं कि हम XXI सदी में क्यों हैं।
लिएंड्रो

जवाबों:


666

http://momentjs.com/ या https://date-fns.org/

मोमेंट डॉक्स से:

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'days')   // =1

या शुरुआत को शामिल करने के लिए:

a.diff(b, 'days')+1   // =2

मैन्युअल रूप से टाइमस्टैम्प और समय क्षेत्र के साथ खिलवाड़ करता है।

आपके विशिष्ट उपयोग के मामले के आधार पर, आप या तो कर सकते हैं

  1. उपयोग a/b.startOf('day')और / या a/b.endOf('day')"छोर" पर समावेशी या अनन्य होने के लिए बाध्य करने के लिए बाध्य करें (जैसा कि टिप्पणियों में @kotpal द्वारा सुझाया गया है)।
  2. trueफ़्लोटिंग पॉइंट फ़र्क पाने के लिए तीसरा तर्क सेट करें Math.floor, जिसे आप तब Math.ceilया Math.roundआवश्यकतानुसार ले सकते हैं।
  3. विकल्प 2 को 'seconds'इसके बजाय प्राप्त 'days'करके और फिर विभाजित करके पूरा किया जा सकता है 24*60*60

30
अगर एक <b। क्षण नकारात्मक मूल्य देगा। तो, और अधिक मजबूत गणना होगी: Math.abs(a.diff(b, 'days'))+1
विनय साहनी

18
समय-भाग को अनदेखा करने के लिए जागरूक रहें - या फिर आपको एक ही तारीख के लिए अलग-अलग परिणाम मिलेंगे लेकिन अलग-अलग समय के साथ (जैसे डेट पिकिंग कंट्रोल से)। उपयोग पल (someDate) .startOf ( 'दिन') स्पष्ट रूप से एक diff (या किसी भी अन्य कार्यों कि दिनांक / पल वस्तु की समय-भाग के प्रति संवेदनशील हैं) प्रदर्शन से पहले 00:00:00 करने के लिए समय भाग सेट करने के लिए
kotpal

यह काम करता है लेकिन यह समय घटक को ध्यान में नहीं रखता है। निम्नलिखित दो जोड़े के बीच अंतर करने की कोशिश कर रहा है: (a = "2017-12-24T00: 00: 00Z" और "b = 2017-12-31T23: 59: 59Z") और (a = "2017-12-24T23: 00 : 00Z "और b =" 2017-12-31T23: 59: 59Z ")। वापसी b.diff (ए, 'दिन') <= 7; दोनों सच लौटे। क्या अंतर में समय घटक को शामिल करने का कोई तरीका है?
रॉबी

1
स्टार्टऑफ () और एंडऑफ () के लिए +1। मैंने कुछ वर्षों के लिए इस पुस्तकालय का उपयोग किया है और पहले कभी इन पर ध्यान नहीं दिया। मैंने हमेशा +1 किया।
माइक डेवेनी

3
इस बात का ध्यान रखें कि startOfयह समय बदल जाता है। यदि आप ऐसा नहीं चाहते हैं, तो करें a.clone().startOf('day').diff(b.clone().startOf('day'))
एचआरजे

53

यदि आप क्षण का उपयोग कर रहे हैं। तो क्या आप इसे आसानी से कर सकते हैं।

var start = moment("2018-03-10", "YYYY-MM-DD");
var end = moment("2018-03-15", "YYYY-MM-DD");

//Difference in number of days
moment.duration(start.diff(end)).asDays();

//Difference in number of weeks
moment.duration(start.diff(end)).asWeeks();

यदि आप किसी दिए गए दिनांक और वर्तमान तिथि के बीच अंतर को दिनों की संख्या में देखना चाहते हैं (समय को अनदेखा कर रहे हैं), तो वर्तमान तिथि के क्षण से समय निकालना सुनिश्चित करें

moment().startOf('day')

किसी दिए गए दिनांक और वर्तमान तिथि के बीच के दिनों की संख्या में अंतर जानने के लिए

var given = moment("2018-03-10", "YYYY-MM-DD");
var current = moment().startOf('day');

//Difference in number of days
moment.duration(given.diff(current)).asDays();

2
asDays () ने मुझे दशमलव के साथ कुछ मान लौटाए। मैं इसका उपयोग करता हूं current.diff(given, 'days')इसलिए इसे गोल किया जाता है।
विंसेंट

@Vincent ऐसा लगता है कि आपका यह गलत तरीका है। यह निश्चित रूप से अधिक साफ समाधान है परिणाम @Supr के उत्तर की तुलना में सही है जिसमें एक 1खो गया है
Nwawel A Iroume

15

प्रयत्न:

//Difference in days

var diff =  Math.floor(( start - end ) / 86400000);
alert(diff);

मुझे लगता है कि यह मूल रूप से सही है, लेकिन क्या यह अनिवार्य रूप से ओपी में नहीं है?
नुकीले

जिस तरह से उसने लिखा था कि मैंने नोटिस नहीं किया, लेकिन हाँ, बहुत ज्यादा! : पी
रिचर्ड

5
मुझे जादू की संख्या पसंद नहीं है .. यह बेहतर होगा यदि वह संख्या एक आत्म-व्याख्यात्मक समीकरण के लिए टूट गई थी
vsync

7

इस क्षण का उपयोग करने की कोशिश करें। js (जावास्क्रिप्ट में दिनांक संचालन की गणना करने के लिए यह काफी आसान है)

firstDate.diff (दूसरा दिन, 'दिन', गलत); // true | भिन्न मान के लिए गलत

परिणाम आपको पूर्णांक में कई दिन देगा।


यहाँ हस्ताक्षर है: पल ()। अंतर (पल | स्ट्रिंग | नंबर | दिनांक | एरियर, स्ट्रिंग, बूलियन)
सुमित

1

इसके अलावा आप इस कोड का उपयोग कर सकते हैं: पल ("yourDateHere", "YYYY-MM-DD")। अब से ()। यह आज और आपकी प्रदान की गई तारीख के बीच अंतर की गणना करेगा।



1

मैंने ईएस 6 में मोमेंट.जेएस का उपयोग करके एक त्वरित पुनः प्रयोग करने योग्य फ़ंक्शन बनाया।

const getDaysDiff = (start_date, end_date, date_format = 'YYYY-MM-DD') => {
  const getDateAsArray = (date) => {
    return moment(date.split(/\D+/), date_format);
  }
  return getDateAsArray(end_date).diff(getDateAsArray(start_date), 'days') + 1;
}

console.log(getDaysDiff('2019-10-01', '2019-10-30'));
console.log(getDaysDiff('2019/10/01', '2019/10/30'));
console.log(getDaysDiff('2019.10-01', '2019.10 30'));
console.log(getDaysDiff('2019 10 01', '2019 10 30'));
console.log(getDaysDiff('+++++2019!!/###10/$$01', '2019-10-30'));
console.log(getDaysDiff('2019-10-01-2019', '2019-10-30'));
console.log(getDaysDiff('10-01-2019', '10-30-2019', 'MM-DD-YYYY'));

console.log(getDaysDiff('10-01-2019', '10-30-2019'));
console.log(getDaysDiff('10-01-2019', '2019-10-30', 'MM-DD-YYYY'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>


-1

MVC मैं दो इनपुट पाठ 1: दिन 2 की संख्या: डेटाइम पिकर है

 @Html.TextBox("HeaderINVID", null, new { @id = "HeaderINVID", @type = "number", @class = "form-control", autocomplete = "off", placeholder = "Day Count " })

  @Html.TextBox("HeaderINVDT", null, new { id = "HeaderINVDT", @class = "form-control format-picker", autocomplete = "off", placeholder = " Date" })

javascipt

दिनांक उपयोग से संख्या की गणना करने के लिए

    $("#HeaderINVID").bind("keyup", function (e) {
        var INVID = $("#HeaderINVID").val();
        var date = moment()
            .add(INVID, 'd')
            .toDate(); 
        $("#HeaderINVDT").val(moment(date).format('YYYY-MM-DD')) ;
    })

दो तारीखों के उपयोग के बीच दिनों की संख्या की गणना करने के लिए

  $("#HeaderINVDT").bind('change', function (e) {
        var StDT = moment($("#HeaderINVDT").val()).startOf('day');
        var NODT = moment().startOf('day');
        $("#HeaderINVID").val(StDT.diff(NODT, 'days'));
    })

http://momentjs.com/ जोड़ना न भूलें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.