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


1092

मैं देखता हूं कि इस प्रश्न का उत्तर जावा , जावास्क्रिप्ट और PHP के लिए दिया गया है , लेकिन C # के लिए नहीं। तो, कोई C # में दो तिथियों के बीच कितने दिनों की गणना कर सकता है?


7
मुझे यह वास्तव में बहुत उपयोगी लगा .. शुरू होने की तारीख और अंतिम तिथि के बीच की तारीखों की एक सूची प्राप्त करना । आशा है कि यह किसी को भी भविष्य में विशेष रूप से यह मांगने में मदद करता है :)
sys_debug

इसके अलावा और घटाव ऑपरेटर आप की अपेक्षा के अनुसार DateTimeऔर TimeSpanप्रकारों के लिए अतिभारित होते हैं । यह सब बहुत सीधा है। - आपका सामना किस सटीक समस्या से हुआ?
BrainSlugs83

जवाबों:


2013

मान लें StartDateऔर EndDateप्रकार के हैं DateTime:

(EndDate - StartDate).TotalDays

549
यह उत्तर स्पष्ट रूप से सही है, लेकिन (a - b).Daysयदि आप आंशिक दिनों के अंतर के दशमलव प्रतिनिधित्व के intबजाय कुल दिनों में रुचि रखते हैं, तो आप इसका उपयोग भी कर सकते हैं double
PFranchise

25
यह 1 कम दिन, 08/31 / 2013-08 / 01/2013 = 31 वापस आ जाएगा, लेकिन यह केवल 30 वापस आ रहा है
JRB

60
@JasRajBishnoi - आप अपने गणित की जांच करना चाहते हैं। 31 - 1 क्या है?
ग्रेग बीच

33
जसराज इस मायने में भी सही थे कि दोनों तारीखों को मिलाकर इसमें एक दिन का अंतर कम होता है। यह सब परिप्रेक्ष्य पर निर्भर करता है।
फहद आबिद जंजुआ

28
@FahadAbidJanjua यह कोई मामला या परिप्रेक्ष्य नहीं है, लेकिन समय की बात है, मेरा मतलब है, तारीख का समय हिस्सा। 08/31/2013 - 08/01/2013 वास्तव में 08/31/2013 00:00:00 - 08/01/2013 00:00:00 का अर्थ है जो बताता है कि यह 30 दिन क्यों है, क्योंकि 08/31/2013 दिन अभी शुरू कर रहे हैं। यही कारण है कि यह भी क्यों, कब दिनांक समय संपत्ति / मैदान पर क्वेरी करने, उचित स्थिति एक सीमा है "DateTimeProperty प्राप्त करने के लिए बताते हैं > = FromDate && DateTimeProperty < ToDate.AddDays (1)"
मिग्वेल वेलोसो

159

शीर्ष उत्तर सही है, हालांकि यदि आप इंट के रूप में केवल WHOLE दिन चाहते हैं और तारीख के समय घटक को वापस करने के लिए खुश हैं: विचार करें:

(EndDate.Date - StartDate.Date).Days

फिर से संभालने StartDateऔर EndDateप्रकार के हैं DateTime


7
सबसे अच्छा जवाब क्योंकि "दिनों की संख्या" सामान्य रूप से पूरे दिन का मतलब है। यह लायक यह देखते हुए कि Days365 में बंद नहीं करता है (जैसे अन्य गुण के रूप में Hours, Minutes, Secondजो Nax मूल्य है, जहां अगले उच्च संपत्ति शुरू होता है)। इसके समान TotalDaysलेकिन एक दिन के अंशों के बिना और intइसके बजाय वापस लौटना double
टिम श्मेल्टर

क्या यह हमेशा उम्मीद के मुताबिक काम करेगा? उदाहरण के लिए, यदि किसी दिन की तुलना "स्प्रिंग फ़ॉरवर्ड" डेलाइट सेविंग टाइम दिन के रूप में की जाती है, तो घटाव 23 घंटे का टाइमस्पैन पैदा कर सकता है, और यदि ऐसा है, तो इसका मान हो जाएगा। ? (मैंने खुद इसके साथ प्रयोग करने की कोशिश की, लेकिन मेरे परिणाम अभी तक अनिर्णायक हैं - stackoverflow.com/questions/43644252/… )
जॉन श्नाइडर

हाँ, यह वही है
जिसकी

अगर केवल 1,5 दिन ही बीत गए हैं। .Days फ़ंक्शन केवल 1 दिन दिखाएगा? मैं इसे 2 दिन दिखाने के लिए कैसे बदल सकता हूं? मुझे बस हमेशा + 1 दिन जोड़ना है?
सीडीरोस

2
इसे आगे बढ़ाते हुए, क्योंकि बहुत बार आपको "दो तिथियों के बीच कैलेंडर दिनों" की आवश्यकता होगी, न कि केवल "24-घंटे के अंतराल की संख्या"। उदाहरण के लिए, आपको समय रेखा में "X दिन पहले" लेबल प्रदर्शित करने की आवश्यकता है। इस मामले में "सोमवार 11:59 बजे" और "मंगलवार 7:00 am" के बीच का अंतर "1 दिन (पहले)" होना चाहिए ... इसलिए .Dateभाग वास्तव में उपयोगी है। आशा है कि मैं अपने आप को स्पष्ट कर रहा हूँ
एलेक्स

138

टाइमस्पैन ऑब्जेक्ट का उपयोग करें जो दिनांक स्थानापन्न का परिणाम है:

DateTime d1;
DateTime d2;
return (d1 - d2).TotalDays;

2
केवल इसलिए अपटूडेट किया गया क्योंकि यह स्पष्ट करता है कि (d1 - d2) टाइमस्पैन ऑब्जेक्ट लौटाएगा।
मोरवेल १५'१६ को

47

मुझे लगता है कि यह वही करेगा जो आप चाहते हैं:

DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(-1);

TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;

34
DateTime xmas = new DateTime(2009, 12, 25);
double daysUntilChristmas = xmas.Subtract(DateTime.Today).TotalDays;

1
वैसे भी DateTime प्रारूप के बीच के दिनों को पाने के लिए? क्योंकि मुझे तालिकाओं में एक निश्चित फ़ील्ड को संशोधित करने के लिए प्रत्येक तिथि की आवश्यकता है :) संपादित करें: इसे प्राप्त किया और इसे नीचे दिए गए उत्तर के रूप में पोस्ट किया। धन्यवाद
sys_debug

4
डेटटाइम एक्समास = नया डेटटाइम (डेटटाइम.टोड.यियर, 12, 25); यह वर्ष के आधार पर एक वर्ष में काम करेगा, न केवल 2009 :)

1
घटाना () DateTimes के लिए OperatorOverload है, इसलिए इसका समान है (xmas - DateTime.Today) .TotalDays - बस अब।
Marc

20

मामले में किसी को (एक डबल के रूप में पूरे दिन की numer चाहता है a, bप्रकार के DateTime):

 (a.Date - b.Date).TotalDays

3
यह हमेशा एक पूरी संख्या होगी, हालांकि (यानी, n.00000) क्योंकि दिनांक भाग हमेशा आधी रात होता है।
जोएनसीए

20
// Difference in days, hours, and minutes.

TimeSpan ts = EndDate - StartDate;

// Difference in days.

int differenceInDays = ts.Days; // This is in int
double differenceInDays= ts.TotalDays; // This is in double

// Difference in Hours.
int differenceInHours = ts.Hours; // This is in int
double differenceInHours= ts.TotalHours; // This is in double

// Difference in Minutes.
int differenceInMinutes = ts.Minutes; // This is in int
double differenceInMinutes= ts.TotalMinutes; // This is in double

आप सेकंड, मिलीसेकंड और टिक में भी अंतर पा सकते हैं।


10

आप यह कोशिश कर सकते हैं

EndDate.Date.Subtract(DateTime.Now.Date).Days

2
यह वास्तव में मेरी मदद करता है क्योंकि मेरी तारीख का अंतर आधा दिन था लेकिन फिर भी जब अमेरिका ऑस्ट्रेलिया से 1 दिन पीछे है तो मुझे यह देखने की जरूरत है कि वास्तव में एक दिन का अंतर है। इस धागे में उल्लिखित अन्य उत्तर 1 के नीचे या तो शून्य या कुछ डबल संख्या दिखा रहे थे, जिनकी मुझे आवश्यकता नहीं है।
बैरी ग्वेनकेया

यह सबसे अच्छा जवाब है जब उद्देश्य की जांच करना है कि क्या तारीख पहले ही दिन समाप्त हो गई है, कोई बात नहीं अगर समय के संदर्भ में पूर्ण 24 दिन नहीं है।
वनबरेनजेना

4

मेरे जैसे शुरुआती कि करने के लिए नमूना रूपांतरण के साथ इस छोटे से समस्या पर आते हैं, एक सरल रेखा में, के लिए पूर्णांक :

int totalDays = Convert.ToInt32((DateTime.UtcNow.Date - myDateTime.Date).TotalDays);

यह आज (DateTime.UtcNow.Date) से वांछित तिथि (myDateTime.Date) के कुल दिनों की गणना करता है।

यदि myDateTime कल या आज की तुलना में पुरानी तारीख है, तो यह एक सकारात्मक (+) पूर्णांक परिणाम देगा।

दूसरी तरफ, यदि myDateTime कल या भविष्य की तारीख में है, तो यह जोड़ के नियमों के कारण एक नकारात्मक (-) पूर्णांक परिणाम देगा।

हैप्पी कोडिंग! ^ _ ^


4

एक टाइमपेन का उपयोग करने से समस्याओं का समाधान होगा क्योंकि इसमें कई विशेषताएं हैं:

DateTime strt_date = DateTime.Now;
DateTime end_date = Convert.ToDateTime("10/1/2017 23:59:59");
//DateTime add_days = end_date.AddDays(1);
TimeSpan nod = (end_date - strt_date);
Console.WriteLine(strt_date + "" + end_date + "" + "" + nod.TotalHours + "");
Console.ReadKey();

3

के लिए aऔर bदो के रूप में DateTimeप्रकार:

DateTime d = DateTime.Now;
DateTime c = DateTime.Now;
c = d.AddDays(145);
string cc;
Console.WriteLine(d);
Console.WriteLine(c);
var t = (c - d).Days;
Console.WriteLine(t);
cc = Console.ReadLine();

0

पहले एक वर्ग घोषित करें जो बाद में वापस आएगा:

public void date()
{
    Datetime startdate;
    Datetime enddate;
    Timespan remaindate;

    startdate = DateTime.Parse(txtstartdate.Text).Date;
    enddate = DateTime.Parse(txtenddate.Text).Date;

    remaindate = enddate - startdate;

    if (remaindate != null)
    {
        lblmsg.Text = "you have left with " + remaindate.TotalDays + "days.";
    }
    else
    {
        lblmsg.Text = "correct your code again.";
    }
}

protected void btncal_Click(object sender, EventArgs e)
{
    date();
}

उपरोक्त वर्ग को कॉल करने के लिए एक बटन नियंत्रण का उपयोग करें। यहाँ एक उदाहरण है:


0

आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

 int DateDifInSecond = EndDate.Subtract(StartDate).TotalSeconds

0

दो तिथियों के बीच अंतर प्राप्त करें और फिर निम्न दिनों से प्राप्त करें:

int total_days = (EndDate - StartDate).TotalDays

1
हालांकि यह कोड स्निपेट प्रश्न को हल कर सकता है, जिसमें स्पष्टीकरण सहित वास्तव में आपकी पोस्ट की गुणवत्ता में सुधार करने में मदद करता है। याद रखें कि आप भविष्य में पाठकों के लिए प्रश्न का उत्तर दे रहे हैं, और उन लोगों को आपके कोड सुझाव के कारणों का पता नहीं चल सकता है। कृपया व्याख्यात्मक टिप्पणियों के साथ अपने कोड को भीड़ने की कोशिश न करें, क्योंकि इससे कोड और स्पष्टीकरण दोनों की पठनीयता कम हो जाती है!
गुडबाय StackExchange

2
TotalDays एक डबल देता है: msdn.microsoft.com/en-us/library/… इसलिए आपको int में रूपांतरण की आवश्यकता है
qnguyen

-21
protected void Calendar1_SelectionChanged(object sender, EventArgs e)
{
    DateTime d = Calendar1.SelectedDate;
    // int a;
    TextBox2.Text = d.ToShortDateString();
    string s = Convert.ToDateTime(TextBox2.Text).ToShortDateString();
    string s1 =  Convert.ToDateTime(Label7.Text).ToShortDateString();
    DateTime dt = Convert.ToDateTime(s).Date;
    DateTime dt1 = Convert.ToDateTime(s1).Date;
    if (dt <= dt1)
    {
        Response.Write("<script>alert(' Not a valid Date to extend warranty')</script>");
    }
    else
    {
        string diff = dt.Subtract(dt1).ToString();
        Response.Write(diff);
        Label18.Text = diff;
        Session["diff"] = Label18.Text;
    }
}   

21
यह कोड कई मायनों में गलत है! 1) बहुत सारे Winforms कोड प्रश्न से संबंधित नहीं हैं। 2) संदेश बॉक्स का उपयोग करके वायर्ड तरीका (मुझे लगता है कि एक WebBrowser नियंत्रण)। 3) पहले से ही लेबल में दिखाए गए पाठ को दिखाने के लिए एक WebBrowser नियंत्रण का उपयोग करना। 4) ऑपरेटरऑवरलोड सबट्रेक्ट () ("-" ऑपरेशंस के लिए डिफॉल्ट) का उपयोग करना जो किसी भी तरह से "मायडेटा - मायडेटेट" के लिए उपयोग किया जाता है। 5) कोड के इस ढेर पर कोई स्पष्टीकरण नहीं।
मार्क
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.