gpt4 book ai didi

javascript - 如何使用 ASP.NET 向 Web 用户显示本地化的日期和时间信息

转载 作者:数据小太阳 更新时间:2023-10-29 04:16:15 30 4
gpt4 key购买 nike

我在服务器上有一个 ASP.NET 应用程序和一个 UTC 时间戳。我想在正确的时区并使用本地日期/时间格式向用户显示时间戳。

例如Jan 2, 2012 14:00:00 UTC 应显示为 1/2/2012 9:00 AM 给美国纽约的用户 (UTC -0500)并作为 02/01/2012 14:00 发送给英国伦敦的用户。

这个看似简单的任务被证明是非常困难的。 MSDN has an article标题相同,但它讨论的是解析用户输入而不是显示服务器端数据,因此并不完全适用。

可以通过 JavaScript 在客户端轻松确定时区偏移量

offset = new Date().getTimezoneOffset();,

但是 JavaScript 对日期/时间格式的支持非常差。您得到的只是 toLocaleString() 方法,它会生成丑陋的长字符串,例如 Monday, January 02, 2012 9:00:00 AM。没有提供更短的格式,因此在客户端上我们被良好的时区信息和糟糕的日期/时间格式功能所困。

服务器上的情况正好相反。我们可以利用 Accept-Language HTTP header 来获取用户语言环境 (not the best choice, but may be good enough),然后利用已知语言环境的 .NET 数据库,因此我们的代码遵循

CultureInfo userCulture = new CultureInfo(Request.UserLanguages[0]);加上一些错误处理。

但是我们陷入了时区问题。是的,可以通过 JavaScript 获取它,然后作为 cookie 或回发数据传回,但是如果我们需要在应用程序的第一页显示日期怎么办?有人可能会争辩说第一页始终是登录页面,但当用户登录信息在 session 之间保持不变时(“记住我”选项),情况并非如此。解决方案可能是将时区偏移保存为用户配置文件的一部分,但它很容易变得陈旧(在 session 之间打开和关闭夏令时)。

是否有一个性能良好且不需要编写大量代码的综合解决方案来解决这个问题?很好奇,请指教。

最佳答案

您应该以标准格式将时间字符串传递给客户端,例如 ISO8601:

var timeString = '2012-01-02T16:00:00Z';

有些浏览器会正确解析 ISO8601 字符串,有些则不会,因此请手动解析以确保安全。这非常简单——创建一个本地日期对象,然后设置 UTC 日期和时间:

function localDateFromUTC(s) {

var x = s.split(/[-\s:tz]/i);
var d = new Date();

d.setUTCFullYear(x[0], x[1], x[2]);
d.setUTCHours(x[3], x[4], x[5]);
return d;
}

var s = '2012-01-02T16:00:00Z';
var d = localDateFromUTC(s);
alert(d); // Shows local date and time for the provided UTC date and time

如果你想要一个特定的输出,你需要手动格式化它,例如

function formatDate(d) {
var days = ['Sunday','Monday','Tuesday','Wednesday',
'Thursday','Friday','Saturday'];
var months = ['January','February','March','April','May','June','July',
'August','September','October','November','December'];

return days[d.getDay()] + ', ' + d.getDate() + ' ' +
months[d.getMonth()] + ', ' + d.getFullYear();
}

您可以尝试使用 toLocaleString(),但不同浏览器的结果差异很大,大多数似乎都忽略了本地设置。

关于javascript - 如何使用 ASP.NET 向 Web 用户显示本地化的日期和时间信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8708118/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com