Hôm nay, mình sẽ chia sẻ các bạn hàm C# và SQL Server nhỏ sẽ trả về giá trị ngày giờ theo cách giống facebook, twitter, stack overflow và hầu hết các trang diễn đàn, cụ thể như 1 ngày trước, 1 phút trước,...
Hiển thị thời gian tương đối là một lựa chọn tốt. Các trang mạng xã hội như Facebook và Twitter sử dụng một chức năng đơn giản cho phép chúng hiển thị thời gian tương đối. Điều này có thể được sử dụng cho các nhận xét và các thông tin liên lạc khác để cho biết thời gian trước thay vì thời gian chính xác có thể không chính xác với một số người ở múi giờ khác.
Và đây là cách đơn giản nhất để tạo ngày giờ tương đối, mong bài viết có ích với bạn, chúc các bạn thành công!
![]() |
Hàm định dạng ngày giờ giống Facebook bằng C# .NET hoặc SQL Sever |
Mình sẽ giới thiệu đến các bạn hai cách đơn giản nhất để tạo định dạng ngày giờ bằng cách sử dụng C# .NET và SQL Server:
Sử dụng hàm static trong C# .NET
Một cách đơn giản nhất là các bạn sử dụng switch case sau đây:
public static string TimeAgo(this DateTime dateTime)
{
string result = string.Empty;
var timeSpan = DateTime.Now.Subtract(dateTime);
if (timeSpan <= TimeSpan.FromSeconds(60))
{
result = string.Format("{0} seconds ago", timeSpan.Seconds);
}
else if (timeSpan <= TimeSpan.FromMinutes(60))
{
result = timeSpan.Minutes > 1 ?
String.Format("about {0} minutes ago", timeSpan.Minutes) :
"about a minute ago";
}
else if (timeSpan <= TimeSpan.FromHours(24))
{
result = timeSpan.Hours > 1 ?
String.Format("about {0} hours ago", timeSpan.Hours) :
"about an hour ago";
}
else if (timeSpan <= TimeSpan.FromDays(30))
{
result = timeSpan.Days > 1 ?
String.Format("about {0} days ago", timeSpan.Days) :
"yesterday";
}
else if (timeSpan <= TimeSpan.FromDays(365))
{
result = timeSpan.Days > 30 ?
String.Format("about {0} months ago", timeSpan.Days / 30) :
"about a month ago";
}
else
{
result = timeSpan.Days > 365 ?
String.Format("about {0} years ago", timeSpan.Days / 365) :
"about a year ago";
}
return result;
}
Tạo hàm Scalar Function trong SQL Server
Đây là cách tạo ngày giờ tương đối trong SQL Server bằng cách tạo hàm vô hướng (Scalar Function):
ALTER FUNCTION FormatDateLikeFacebook
(
@datetime DATETIME
)
RETURNS NVARCHAR(100)
AS
BEGIN
DECLARE @timeago NUMERIC(10) = DATEDIFF(second,{d '1970-01-01'}, @datetime)
DECLARE @current_time NUMERIC(10) = DATEDIFF(second,{d '1970-01-01'}, GETDATE())
DECLARE @time_difference NUMERIC(10) = @current_time - @timeago
DECLARE @seconds NUMERIC(10) = @time_difference
DECLARE @minutes NUMERIC(10) = ROUND(@seconds / 60, 0)
DECLARE @hours NUMERIC(10) = ROUND(@seconds/ 3600, 0)
DECLARE @days NUMERIC(10) = ROUND(@seconds/86400, 0)
DECLARE @weeks NUMERIC(10) = ROUND(@seconds/604800, 0)
DECLARE @months NUMERIC(10) = ROUND(@seconds/2629440, 0)
DECLARE @years NUMERIC(10) = ROUND(@seconds/31553280, 0)
IF @seconds <= 60
RETURN N'Vừa mới đăng.'
ELSE IF @minutes<=60
BEGIN
IF @minutes = 1
RETURN N'Cách đây 1 phút.'
ELSE
RETURN CONCAT(N'Cách đây ', @minutes, N' phút.')
END
ELSE IF @hours<=24
BEGIN
IF @hours = 1
RETURN N'Cách đây 1 giờ.'
ELSE
RETURN CONCAT(N'Cách đây ', @hours, N' giờ.')
END
ELSE IF @days<= 7
BEGIN
IF @days = 1
RETURN N'Ngày hôm qua.'
ELSE
RETURN CONCAT(N'Cách đây ', @days, N' ngày.')
END
ELSE IF @weeks<= 4.3
BEGIN
IF @weeks = 1
RETURN N'Cách đây 1 tuần.'
ELSE
RETURN CONCAT(N'Cách đây ', @weeks, ' tuần.')
END
ELSE IF @months<= 12
BEGIN
IF @months = 1
RETURN N'Cách đây 1 tháng.'
ELSE
RETURN CONCAT(N'Cách đây ', @months, N' tháng.')
END
ELSE
BEGIN
IF @years =1
RETURN N'Cách đây 1 năm.'
ELSE
RETURN CONCAT(N'Cách đây ', @years, N' năm.')
END
RETURN ''
END
Hiếu Quốc.