Cách hiển thị các giá trị thời gian theo múi giờ của trình duyệt khách

Xem: 3242    Tải: 0   Thảo luận: 0   Mục: Công cụ phát triển   Lĩnh vực: Khác

0 điểm   ( 17 đánh giá ) File đã được kiểm thử


Đầu tiên, tôi cần lưu thời gian theo giờ GMT bằng hàm GetUtcDate() trong SQL Server hoặc DateTime.UtcNow trong .NET. Tiếp theo, khi người dùng duyệt một trang từ website của tôi, thì web server sẽ cố gắng tìm kiếm thông tin múi giờ của người dùng và chuyển đổi các giá trị về ngày giờ sang múi giờ của người dùng và trả về cho trình duyệt khách.

Ví dụ như, tôi ở Việt Nam (GMT7), khi tôi đọc một bài viết, và ngày giờ tạo bài viết là 2013/06/24 10:00am theo giờ GMT, thì nó nên được hiển thị là 2013/06/24 5:00 pm (GMT7).

Thứ nữa, chúng ta cần phải biết rằng, không thể lấy được múi giờ của trình duyệt khách ở phía server, mà phải dùng JavaScript ở trình duyệt khách để lấy số phút chênh lệnh giữa giờ GMT và giờ của trình duyệt khách.

var offset = new Date();
alert(offset.getTimezoneOffset()); 
//Kết quả là 420 nếu múi giờ trình khách là GMT+7, tức là 7 giờ hoặc 420 phút

Như vậy, bây giờ chúng ta đã có khoảng chênh lệch thời gian. Nhưng để lấy được giá trị này ở server, chúng ta cần lưu chúng vào cookie bằng mã JavaScript như dưới đây:

fuction setCookie(cookieName, cookieValue, nDays) {
var today = new Date();
var expire = new Date();
if (nDays == null || nDays == 0) nDays = 1;
expire.setTime(today.getTime() + 3600000 * 24 * nDays);
document.cookie = cookieName + "=" + escape(cookieValue)
+ ";expires=" + expire.toGMTString() + "; path=/";
}

var offset = new Date(); 
setCookie("TimeOffset", offset.getTimezoneOffset(), 365);

Nhưng hãy khoan, bạn hãy chú ý đến câu lệnh cuối cùng trong phương thức setCookie:

document.cookie = cookieName + "=" + escape(cookieValue)
+ ";expires=" + expire.toGMTString() + "; path=/"; 

Tại sao chúng ta có tham số "path=/"? Nó có nghĩa là gì? Vâng, nó rất quan trọng. Bạn cần hiểu rằng, cookies là một dữ liệu dạng từ điển và sẽ được gởi đi và về giữa client và server, và vì vậy, cookie nên có dung lượng càng bé càng tốt.

Hãy xem một ví dụ dưới đây:

1) Sử dụng FireBug, thêm một cookie bằng cách thực hiện câu lệnh document.cookie=”sample=420;” tại mức gốc của website (“/” level).



Khi chuyển sang tab Cookies của Firebug, bạn sẽ thấy:



Vâng, cookie có tên sample được lưu, và giá trị Path của nó là "/".

2) Sử dụng FireBug thêm lần nữa, và cố gắng thêm cookie với mức sâu hơn như http://jou.vn/Article/Tao-virtual-directory-cho-apache-server-tren-Ubuntu/2187, bạn sẽ thấy có thêm một cookie được lưu với cùng tên sample:



Không nhất thiết phải lưu cookie cùng tên, cùng giá trị ở nhiều path khác nhau như vậy. Và để lưu cookie chỉ ở một nơi, chúng ta cần định nghĩa tham số path:

document.cookie = "sample=420;path=/"

Mặc khác, ASP.NET cũng chỉ lấy được Cookie ở "path=/" mà thôi. Với ASP.NET, mã lấy cookie đơn giản như sau:
 

    public int GetClientTimeOffset()
    {
        var timeOffset = 0;
        var timeOffsetCookie = HttpContext.Current.Request.Cookies["TimeOffset"];
        if (timeOffsetCookie != null)
        {
            timeOffset += Convert.ToInt32(timeOffsetCookie.Value);
        }

        return timeOffset;
    }

 

Bằng cách sử dụng phương thức trên, bạn có thể dễ dàng chuyển đối giá trị thời gian theo múi giờ của trình duyệt khách:

item.CreatedDate = comment.CreatedDate.AddMinutes
           (-_cultureService.GetClientTimeOffset());

Nếu bạn là lập trình viên PHP, bạn có thể lấy giá trị cookie một cách dễ dàng bằng biến toàn cục $_COOKIE:

$timeOffset = $_COOKIE["timeOffset"];

Nhưng bạn đừng quên validate giá trị của cookie trước khi làm các thao tác khác, bởi vì, ai cũng có thể quy định giá trị của cookie bằng cách sử dụng tool như FireBug chẳng hạn. Và đôi khi, cookie chưa được gán giá trị.

Cách hiển thị các giá trị thời gian theo múi giờ của trình duyệt khách

Cách hiển thị các giá trị thời gian theo múi giờ của trình duyệt khách Đăng ngày 24-02-2014  Tôi có một trang web và có nhiều người dùng đến từ các múi giờ khác nhau, và tôi muốn thời gian hiển thị trên website của tôi sẽ hiển thị theo múi giờ của trình duyệt khách. Làm sao để có thể thực hiện được điều đó? 5/10 3242

Thảo luận:

Để bình luận bạn phải đăng nhập thành viên.

File tương tự

Files cùng mục

 

File tải nhiều nhất

Megacode.vn - Thư viện mã nguồn chia sẻ, tải file cho cộng đồng
Copyright © 2013-2016. All rights reserved. Bản quyền thuộc VinaGon
Địa chỉ: Số 38 Hàng Bè, Hàng Bạc, Hoàn Kiếm, Hà Nội.
Văn phòng giao dịch: Phòng 28, Tầng 6, HH1A Linh Đàm, Hoàng Mai, Hà Nội
Email: info@vinagon.com | Website: www.vinagon.com | Điện thoại: (+844) 6. 32.979.36;
logo megacode

Megacode đã đăng ký với Bộ Công Thương
Thư viện mã nguồn mở lớn nhất Việt Nam.



Hỗ trợ khách hàng trên Megacode
Hỗ trợ kỹ thuật cho thành viên:
Tổng đài: (+84) 246. 32.979.36
Số di động (Hotline): 0969.091.265
Thời gian làm việc:
Sáng: 8h-12h; Chiều: 13h30-17h30
(Nghỉ chiều T7, CN và các ngày lễ, tết)
Chat với Megacode
https://www.facebook.com/megacodevn