Hitung perbedaan antara dua tanggal (jumlah hari)?
1093
Saya melihat bahwa pertanyaan ini telah dijawab untuk Java , JavaScript , dan PHP , tetapi tidak untuk C #. Jadi, bagaimana seseorang menghitung jumlah hari antara dua tanggal dalam C #?
Operator penambahan dan pengurangan kelebihan beban untuk DateTimedan TimeSpanjenis seperti yang Anda harapkan. Itu semua sangat mudah. - Masalah persis apa yang Anda temui?
Jawaban ini jelas benar, tetapi Anda juga dapat menggunakan (a - b).Daysjika Anda tertarik pada total hari sebagai intbukan doubledengan representasi desimal dari perbedaan sebagian hari.
PFranchise
25
ini akan mengembalikan 1 hari lebih sedikit, 08/31 / 2013-08 / 01/2013 = 31 tetapi ini hanya mengembalikan 30.
JRB
60
@JasRajBishnoi - Anda mungkin ingin memeriksa matematika Anda. Apa itu 31 - 1?
Greg Beech
33
JasRaj juga benar dalam arti bahwa termasuk kedua tanggal itu mengembalikan satu hari lebih sedikit perbedaan. Itu semua tergantung perspektif.
Fahad Abid Janjua
28
@FahadAbidJanjua Ini bukan masalah atau perspektif tetapi masalah waktu, maksud saya, bagian waktu dari tanggal. 08/31/2013 - 08/01/2013 sangat berarti 08/31/2013 00:00:00 - 08/01/2013 00:00:00 yang menjelaskan mengapa 30 hari, karena hari 08/31/2013 adalah baru mulai. Itu juga menjelaskan mengapa, saat melakukan pencarian pada properti / bidang DateTime, kondisi yang tepat untuk mendapatkan rentang adalah "DateTimeProperty > = FromDate && DateTimeProperty < ToDate.AddDays (1)"
Miguel Veloso
161
Jawaban teratas sudah benar, namun jika Anda hanya ingin SELURUH hari sebagai int dan dengan senang hati melupakan komponen waktu pada tanggal tersebut maka pertimbangkan:
(EndDate.Date-StartDate.Date).Days
Sekali lagi dengan asumsi StartDatedan EndDatetipe DateTime.
Jawaban terbaik karena "jumlah hari" biasanya berarti sepanjang hari. Itu perlu dicatat bahwa Daystidak berhenti di 365 (sebagai properti lain seperti Hours, Minutes, Secondyang nilai nax adalah di mana properti yang lebih tinggi berikutnya dimulai). Itu sama TotalDaystetapi tanpa pecahan sehari dan kembali intbukannya double.
Tim Schmelter
Apakah ini akan selalu berfungsi seperti yang diharapkan? Misalnya, jika salah satu hari yang dibandingkan adalah hari musim semi "maju", dapatkah pengurangan menghasilkan TimeSpan 23 jam, dan jika demikian, apakah nilai .Days pada rentang waktu 23 jam menjadi 0 ? (Saya mencoba bereksperimen dengan ini sendiri, tetapi hasil saya sejauh ini tidak meyakinkan - stackoverflow.com/questions/43644252/... )
Jon Schneider
Yup, ini yang saya butuhkan - jawaban paling berharga cmon sekarang tidak ada yang mau memikirkan Menit dan Detik dalam hitungan hari
solujic
jika hanya 1,5 hari telah berlalu, fungsi Days ini akan menunjukkan hanya 1 Hari? bagaimana saya bisa mengubahnya untuk ditampilkan 2 hari? saya hanya harus selalu menambahkan +1 hari?
CDrosos
2
Upvoting ini, karena sangat sering Anda akan memerlukan "KALENDER hari antara dua tanggal", bukan hanya "jumlah interval 24 jam". Misalnya, Anda perlu menampilkan label "X hari yang lalu" dalam timeline. Dalam hal ini perbedaan antara "Senin 11:59 malam" dan "Selasa 7:00 pagi" harus "1 hari (lalu)" ... Jadi .Datebagian ini sangat berguna. Saya harap saya menjelaskan
Alex
138
Gunakan objek TimeSpan yang merupakan hasil dari substraksi tanggal:
Pokoknya untuk mendapatkan hari-hari di antara dalam format DateTime? Karena saya perlu setiap tanggal untuk memodifikasi bidang tertentu dalam tabel :) Edit: Mendapat dan mempostingnya sebagai jawaban di bawah ini. Terima kasih
sys_debug
4
DateTime xmas = DateTime baru (DateTime.Today.Year, 12, 25); akan membuatnya bekerja setiap tahun, bukan hanya 2009 :)
1
Kurangi () adalah OperatorOverload untuk DateTimes jadi itu sama "(xmas - DateTime.Today) .TotalDays - lebih lama.
Marc
20
Jika seseorang menginginkan angka sepanjang hari sebagai dobel ( a, bbertipe DateTime):
Ini akan selalu menjadi bilangan bulat (yaitu, n.00000) karena bagian Tanggal selalu tengah malam.
JoeNCA
20
// Difference in days, hours, and minutes.TimeSpan ts =EndDate-StartDate;// Difference in days.int differenceInDays = ts.Days;// This is in intdouble differenceInDays= ts.TotalDays;// This is in double// Difference in Hours.int differenceInHours = ts.Hours;// This is in intdouble differenceInHours= ts.TotalHours;// This is in double// Difference in Minutes.int differenceInMinutes = ts.Minutes;// This is in intdouble differenceInMinutes= ts.TotalMinutes;// This is in double
Anda juga bisa mendapatkan perbedaan dalam hitungan detik, milidetik, dan kutu.
Ini sebenarnya membantu saya yang terbaik karena perbedaan tanggal saya setengah hari, tetapi masih ketika Amerika 1 hari di belakang Australia saya perlu melihat sebenarnya ada perbedaan satu hari. Jawaban lain yang disebutkan dalam utas ini menunjukkan nol atau angka ganda di bawah 1 yang tidak saya butuhkan.
Barry Guvenkaya
Ini adalah jawaban terbaik ketika tujuannya adalah untuk memeriksa apakah tanggal telah berlalu ke hari berikutnya, tidak masalah jika dari segi waktu bukan 24 jam penuh.
oneberenjena
4
Untuk pemula seperti saya yang akan menemukan masalah kecil ini, dalam garis sederhana, dengan konversi sampel ke int :
int totalDays =Convert.ToInt32((DateTime.UtcNow.Date- myDateTime.Date).TotalDays);
Ini menghitung total hari dari hari ini (DateTime.UtcNow.Date) ke tanggal yang diinginkan (myDateTime.Date).
Jika myDateTime adalah kemarin, atau lebih tua dari hari ini, ini akan memberikan hasil bilangan bulat positif (+).
Di sisi lain, jika myDateTime adalah besok atau di masa mendatang, ini akan memberikan hasil bilangan bulat negatif (-) karena aturan penambahan.
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();
Sementara potongan kode ini dapat menyelesaikan pertanyaan, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda. Tolong juga cobalah untuk tidak membuat kerumunan kode Anda dengan komentar penjelasan, karena ini mengurangi keterbacaan kode dan penjelasan!
protectedvoidCalendar1_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;}}
Kode ini salah dalam banyak hal! 1) Banyak kode Winforms yang tidak terkait dengan pertanyaan. 2) Cara kabel menampilkan kotak pesan menggunakan (Saya kira kontrol WebBrowser). 3) menggunakan kontrol WebBrowser untuk menampilkan teks yang sudah ditunjukkan pada label. 4) Menggunakan OperatorOverload Kurangi () (default untuk "-" operasi) yang digunakan untuk tetap jika Anda melakukan "MyDateA - MyDateB". 5) Tidak ada penjelasan tentang tumpukan kode ini.
DateTime
danTimeSpan
jenis seperti yang Anda harapkan. Itu semua sangat mudah. - Masalah persis apa yang Anda temui?Jawaban:
Dengan asumsi
StartDate
danEndDate
tipeDateTime
:sumber
(a - b).Days
jika Anda tertarik pada total hari sebagaiint
bukandouble
dengan representasi desimal dari perbedaan sebagian hari.Jawaban teratas sudah benar, namun jika Anda hanya ingin SELURUH hari sebagai int dan dengan senang hati melupakan komponen waktu pada tanggal tersebut maka pertimbangkan:
Sekali lagi dengan asumsi
StartDate
danEndDate
tipeDateTime
.sumber
Days
tidak berhenti di 365 (sebagai properti lain sepertiHours
,Minutes
,Second
yang nilai nax adalah di mana properti yang lebih tinggi berikutnya dimulai). Itu samaTotalDays
tetapi tanpa pecahan sehari dan kembaliint
bukannyadouble
..Date
bagian ini sangat berguna. Saya harap saya menjelaskanGunakan objek TimeSpan yang merupakan hasil dari substraksi tanggal:
sumber
Saya pikir ini akan melakukan apa yang Anda inginkan:
sumber
sumber
Jika seseorang menginginkan angka sepanjang hari sebagai dobel (
a
,b
bertipeDateTime
):sumber
Anda juga bisa mendapatkan perbedaan dalam hitungan detik, milidetik, dan kutu.
sumber
Anda bisa mencoba ini
sumber
Untuk pemula seperti saya yang akan menemukan masalah kecil ini, dalam garis sederhana, dengan konversi sampel ke int :
Ini menghitung total hari dari hari ini (DateTime.UtcNow.Date) ke tanggal yang diinginkan (myDateTime.Date).
Jika myDateTime adalah kemarin, atau lebih tua dari hari ini, ini akan memberikan hasil bilangan bulat positif (+).
Di sisi lain, jika myDateTime adalah besok atau di masa mendatang, ini akan memberikan hasil bilangan bulat negatif (-) karena aturan penambahan.
Selamat coding! ^ _ ^
sumber
Menggunakan rentang waktu akan menyelesaikan masalah karena memiliki banyak atribut:
sumber
Untuk
a
danb
sebagai duaDateTime
jenis:sumber
Pertama mendeklarasikan kelas yang akan kembali nanti:
Gunakan tombol kontrol untuk memanggil kelas di atas. Berikut ini sebuah contoh:
sumber
Anda dapat menggunakan kode di bawah ini:
sumber
Dapatkan perbedaan antara kedua tanggal dan kemudian dapatkan hari dari:
sumber
sumber