ฉันเห็นว่าคำถามนี้ได้รับคำตอบสำหรับJava , JavaScriptและPHPแต่ไม่ใช่ C # ดังนั้นวิธีหนึ่งอาจคำนวณจำนวนวันระหว่างสองวันใน C #
DateTime
และTimeSpan
ประเภทตามที่คุณคาดหวัง มันค่อนข้างตรงไปตรงมา - คุณพบปัญหาอะไรกันแน่?
ฉันเห็นว่าคำถามนี้ได้รับคำตอบสำหรับJava , JavaScriptและPHPแต่ไม่ใช่ C # ดังนั้นวิธีหนึ่งอาจคำนวณจำนวนวันระหว่างสองวันใน C #
DateTime
และTimeSpan
ประเภทตามที่คุณคาดหวัง มันค่อนข้างตรงไปตรงมา - คุณพบปัญหาอะไรกันแน่?
คำตอบ:
สมมติStartDate
และEndDate
เป็นประเภทDateTime
:
(EndDate - StartDate).TotalDays
(a - b).Days
ถ้าคุณมีความสนใจในวันรวมเป็นint
มากกว่าที่double
มีการแสดงทศนิยมของความแตกต่างบางส่วนของวัน
คำตอบยอดนิยมนั้นถูกต้องอย่างไรก็ตามหากคุณต้องการเพียงแค่วันเดียวในฐานะ int และยินดีที่จะละทิ้งองค์ประกอบเวลาของวันที่ให้พิจารณา:
(EndDate.Date - StartDate.Date).Days
อีกครั้งสมมติStartDate
และเป็นประเภทEndDate
DateTime
Days
ไม่หยุดอยู่ที่ 365 (ในขณะที่คุณสมบัติอื่น ๆ เช่นHours
, Minutes
, Second
ซึ่งค่า Nax คือที่ที่อยู่ถัดจากสถานที่ให้บริการที่สูงขึ้นเริ่มต้น) มันเป็นเช่นเดียวกับTotalDays
แต่ไม่มีเศษของวันและกลับมาแทนint
double
.Date
ส่วนนี้มีประโยชน์จริง ๆ หวังว่าฉันจะทำให้ตัวเองชัดเจน
ใช้วัตถุ TimeSpan ซึ่งเป็นผลมาจากการลบวันที่:
DateTime d1;
DateTime d2;
return (d1 - d2).TotalDays;
ฉันคิดว่านี่จะทำสิ่งที่คุณต้องการ:
DateTime d1 = DateTime.Now;
DateTime d2 = DateTime.Now.AddDays(-1);
TimeSpan t = d1 - d2;
double NrOfDays = t.TotalDays;
DateTime xmas = new DateTime(2009, 12, 25);
double daysUntilChristmas = xmas.Subtract(DateTime.Today).TotalDays;
ในกรณีที่มีคนต้องการจำนวนวันทั้งคู่เป็นคู่ ( a
, b
ของประเภทDateTime
):
(a.Date - b.Date).TotalDays
// 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
นอกจากนี้คุณยังสามารถรับความแตกต่างในไม่กี่วินาที, มิลลิวินาทีและเห็บ
คุณสามารถลองสิ่งนี้
EndDate.Date.Subtract(DateTime.Now.Date).Days
สำหรับผู้เริ่มต้นอย่างฉันที่จะสะดุดปัญหาเล็ก ๆ นี้ในบรรทัดง่าย ๆ ด้วยการแปลงตัวอย่างเป็นint :
int totalDays = Convert.ToInt32((DateTime.UtcNow.Date - myDateTime.Date).TotalDays);
สิ่งนี้จะคำนวณจำนวนวันทั้งหมดตั้งแต่วันนี้ (DateTime.UtcNow.Date) เป็นวันที่ที่ต้องการ (myDateTime.Date)
ถ้า myDateTime เป็นวันวานหรือวันที่เก่ากว่าวันนี้จะให้ผลลัพธ์เป็นจำนวนเต็มบวก (+)
ในอีกด้านหนึ่งถ้า myDateTime เป็นวันพรุ่งนี้หรือวันที่ในอนาคตสิ่งนี้จะให้ผลลบ (-) จำนวนเต็มเนื่องจากกฎของการเพิ่ม
การเข้ารหัสที่มีความสุข! ^ _ ^
การใช้ไทม์แพนจะช่วยแก้ปัญหาเนื่องจากมีคุณสมบัติหลายอย่าง:
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();
สำหรับ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();
ก่อนอื่นให้ประกาศคลาสที่จะกลับมาในภายหลัง:
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();
}
ใช้ตัวควบคุมปุ่มเพื่อเรียกคลาสข้างต้น นี่คือตัวอย่าง:
คุณสามารถใช้รหัสด้านล่าง:
int DateDifInSecond = EndDate.Subtract(StartDate).TotalSeconds
รับความแตกต่างระหว่างวันที่สองวันจากนั้นรับวันจาก:
int total_days = (EndDate - StartDate).TotalDays
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;
}
}