我希望服务器始终在HTML中提供UTC日期,并在客户端站点上使用JavaScript将其转换为用户的本地时区.
如果我可以用户的区域设置日期格式输出,则可以获得奖励.
我知道如何获得时区偏移,但我需要的是能够检测"美国/纽约"之类的东西.这甚至可能来自JavaScript还是我将不得不根据偏移量进行猜测?
有没有可能在不使用webservices的情况下确定point(lat/lon)的时区?Geonames.org对我来说不够稳定:(我需要这个在PHP中工作.
谢谢
可能重复:
如何确定Web用户的时区?
这是最好的方法吗?php或javascript.Can有人为我提供了一些片段?谢谢.
我们的应用程序旨在处理来自不同地理位置的用户.
我们无法检测当前最终用户当地时间和时区对其进行操作的情况.他们选择不同的文化,如sv-se,en-us,ta-In甚至他们从欧洲/伦敦时区访问..
我们在美国托管服务器托管它,应用程序用户来自 Norway/Denmark/Sweden/UK/USA/India
问题是我们用来DateTime.Now存储记录创建/更新日期等.
由于服务器在美国运行,所有用户数据都保存为美国时间:(
在SO中进行研究后,我们决定将所有历史日期存储在DB中 DateTime.UtcNow
问题:

创建了一条记录29 Dec 2013, 3:15 P.M Swedish time.
public ActionResult Save(BookingViewModel model)
{
Booking booking = new Booking();
booking.BookingDateTime = model.BookingDateTime; //10 Jan 2014 2:00 P.M
booking.Name = model.Name;
booking.CurrentUserId = (User)Session["currentUser"].UserId;
//USA Server runs in Pacific Time Zone, UTC-08:00
booking.CreatedDateTime = DateTime.UtcNow; //29 Dec 2013, 6:15 A.M
BookingRepository.Save(booking);
return View("Index");
}
Run Code Online (Sandbox Code Playgroud)
我们希望向在India/Sweden/USA登录的用户显示相同的历史记录时间.
截至目前,我们正在使用当前文化用户登录并从配置文件中选择时区并使用TimeZoneInfo类进行转换
<appSettings>
<add key="sv-se" value="W. Europe Standard Time" />
<add key="ta-IN" value="India Standard …Run Code Online (Sandbox Code Playgroud) 我需要根据IP或http标头知道我的用户目前在哪个时区.
关于这个问题,我得到了很多答案,但我无法理解这些答案.有人说使用-new Date().getTimezoneOffset()/60(从这里).但是这是什么意思?
我date_default_timezone_set("Asia/Calcutta");在(index.php)页面的根目录中有一个.因此,我必须动态获取时区并将其设置为代替Asia/Calcutta.
我正在构建一个MVC 3应用程序,其中用户可能不在同一时区,因此我的意图是以UTC格式存储所有内容,并在视图中将UTC转换为本地时间,并在提交时将本地时间转换为UTC.
做一些浏览虽然似乎没有很多好的解决方案.说实话,我有点期望一个属性可用于将UTC时间自动转换为本地时间,但似乎不存在.
我觉得只是努力将每个输入手动转换为UTC并手动将每个视图转换为本地时间显示将非常容易出错并导致难以检测到时间未转换为或未转换的错误.
关于如何将此作为一般策略的任何建议?
编辑 每个人似乎都非常坚持"如何获得客户端时区"这篇文章,正如我在其中一篇评论中提到的那样,并不是我关注的问题.我很好用一个用户设置确定他们的时区,所以假设我已经知道客户端时区是什么...这不能解决我的问题.
现在,在我渲染日期的每个视图上,我需要调用一个方法来从utc在本地时区渲染它.每次我向服务器发送提交日期时,我都需要将其从本地时区转换为UTC.如果我忘记这样做会有问题...提交的日期将是错误的或客户端报告和过滤器将是错误的.
我希望存在的是一种更自动化的方法,特别是因为视图模型在MVC 3中强类型我希望sum魔术能够至少自动在时区中呈现,如果不处理提交,就像日期格式或范围可以由属性控制.
所以喜欢
[DateRange]
Public DateTime MyDate
Run Code Online (Sandbox Code Playgroud)
我可以有类似的东西
[ConvertToUTC(offset)]
Public DateTime MyDate
Run Code Online (Sandbox Code Playgroud)
无论如何,我想我的唯一方法就是编写自定义数据注释以在时区中呈现它,并在MVC 3模型绑定器上覆盖,以便转换传入日期,除非我想在方法中包装任何日期呼叫.因此,除非有人有进一步的意见或建议,否则它将是这两个选项中的一个,我只是惊讶于已经不存在的事情.
如果我确实实施了解决方案,我一定会发布它.
编辑2 像这样的 http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx用于MVC 3视图和视图模型是我正在寻找的.
最终编辑 我将epignosisx的答案标记为正确,但也有一些评论要添加.我在这里发现了类似的东西: http: //dalldorf.com/blog/2011/06/mvc3-timezones-1/ 通过将时区放在cookie中为第2部分中需要的人提供时区的实现(链接如下,因为文章第一部分到第2部分的链接不起作用) http://dalldorf.com/blog/2011/09/mvc3-timezones-2/
重要的是要注意这些方法,你必须使用Editfor和Displayfor而不是像TextForFor这样的东西,因为只有EditFor和DisplayFor使用元数据提供程序来告诉MVC如何在模型上显示该类型的属性.如果直接在视图中访问模型值(@ Model.MyDate),则不会进行转换.