วิธีการคำนวณ เวลาเชิงสัมพันธ์
ใน C#
เมื่อทำงานกับวันที่และเวลาใน C# คุณอาจพบว่าจำเป็นต้องแสดงว่ามีเวลาผ่านไปนานเท่าไหร่ตั้งแต่เกิดเหตุการณ์หนึ่งเหตุการณ์ การแสดงเวลาในรูปแบบที่เข้าใจง่าย เช่น “2 ชั่วโมงที่แล้ว” หรือ “เมื่อวานนี้” สามารถทำให้ผู้ใช้มีประสบการณ์ที่ดีขึ้น ในโพสต์นี้ เราจะสำรวจวิธีการนำฟังก์ชันนี้ไปใช้โดยใช้คลาส DateTime
และ TimeSpan
ใน C#
แนวคิดของเวลาเชิงสัมพันธ์
เวลาเชิงสัมพันธ์หมายถึงการแสดงเวลาที่ผ่านไปตั้งแต่เกิดเหตุการณ์หนึ่งในลักษณะที่เข้าใจได้ง่าย แทนที่จะโชว์เวลาแบบแน่นอน การแสดงเวลาเช่น “3 วันที่แล้ว” หรือ “เมื่อวาน” จะทำให้ผู้ใช้เข้าใจเวลาที่ผ่านมาได้ง่ายโดยไม่ต้องทำการคำนวณด้วยตนเอง
การนำเวลาเชิงสัมพันธ์ไปใช้ใน C#
นี่คือวิธีการคำนวณเวลาเชิงสัมพันธ์โดยใช้ค่า DateTime
ใน C#:
ขั้นตอนที่ 1: กำหนดค่าคงที่สำหรับช่วงเวลา
ก่อนอื่นคุณต้องตั้งค่าคงที่ที่แทนช่วงเวลาที่แตกต่างกัน ซึ่งจะทำให้โค้ดของคุณสะอาดและเข้าใจง่ายขึ้น
const int SECOND = 1;
const int MINUTE = 60 * SECOND;
const int HOUR = 60 * MINUTE;
const int DAY = 24 * HOUR;
const int MONTH = 30 * DAY;
ขั้นตอนที่ 2: คำนวณ TimeSpan
เพื่อที่จะกำหนดว่าเวลาผ่านไปนานเท่าไหร่ ให้คำนวณ TimeSpan
ระหว่างเวลาปัจจุบันและ DateTime
ที่กำหนด
var ts = new TimeSpan(DateTime.UtcNow.Ticks - yourDate.Ticks);
double delta = Math.Abs(ts.TotalSeconds);
ขั้นตอนที่ 3: กำหนดรูปแบบเวลาที่เหมาะสม
เมื่อคุณคำนวณ TimeSpan
แล้ว คุณสามารถกำหนดวิธีการจัดรูปแบบเวลาเชิงสัมพันธ์โดยการใช้คำสั่งเงื่อนไข
นี่คือวิธีที่คุณสามารถคืนค่าสตริงที่เหมาะสมตามช่วงเวลาแตกต่าง ๆ:
if (delta < 1 * MINUTE)
return ts.Seconds == 1 ? "หนึ่งวินาทีที่แล้ว" : ts.Seconds + " วินาทีที่แล้ว";
if (delta < 2 * MINUTE)
return "หนึ่งนาทีที่แล้ว";
if (delta < 45 * MINUTE)
return ts.Minutes + " นาทีที่แล้ว";
if (delta < 90 * MINUTE)
return "หนึ่งชั่วโมงที่แล้ว";
if (delta < 24 * HOUR)
return ts.Hours + " ชั่วโมงที่แล้ว";
if (delta < 48 * HOUR)
return "เมื่อวานนี้";
if (delta < 30 * DAY)
return ts.Days + " วันที่แล้ว";
if (delta < 12 * MONTH)
{
int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30));
return months <= 1 ? "หนึ่งเดือนที่แล้ว" : months + " เดือนที่แล้ว";
}
else
{
int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365));
return years <= 1 ? "หนึ่งปีที่แล้ว" : years + " ปีที่แล้ว";
}
ข้อคิดสุดท้าย
โค้ดข้างต้นช่วยให้คุณสามารถคำนวณและแสดงเวลาเชิงสัมพันธ์ได้อย่างมีประสิทธิภาพ เมื่อคุณนำสิ่งนี้ไปใช้ในแอปพลิเคชัน C# ของคุณ คุณสามารถปรับปรุงการใช้งานโดยทำให้การอ้างอิงวันที่เป็นที่เข้าใจได้มากขึ้นสำหรับผู้ใช้
ตอนนี้คุณพร้อมที่จะใช้วิธีการที่ใช้งานได้จริงในการเพิ่มการแสดงผลเวลาเชิงสัมพันธ์ในแอปพลิเคชันของคุณแล้ว สนุกกับการเขียนโค้ด!