gpt4 book ai didi

javascript - C# DateTime - 使用 fullcalendar.io 处理时区的最佳方法?

转载 作者:行者123 更新时间:2023-12-03 01:52:34 25 4
gpt4 key购买 nike

我正在开发一个使用日历的网络应用程序。当我创建日历事件并选择上午 10:00 的开始时间时,该事件将保存为上午 09:00(我位于英国,目前采用 UTC+1,我认为这是造成差异的原因。

我想知道处理此问题的最佳方法,并确保如果来自任何时区的用户在日历上选择上午 10:00,则该上午 10:00 会写入数据库。

以下是相关的代码。我对 StartFinish 变量特别感兴趣,它们始终都是日期时间数据类型:

这是捕获事件创建的 Javascript:

eventDrop: function (calEvent, dayDelta, minuteDelta, allDay, revertFunc) {
var event = {};
event.EventID = calEvent.eventid;
event.StatusString = "Update";
event.CustomerID = calEvent.customerid;
event.ProductID = calEvent.productid;
event.Title = calEvent.title;
event.Start = new Date(calEvent.start.format());
event.Finish = new Date(calEvent.end.format());
event.EventNote = calEvent.eventNote;
event.ProductValue = calEvent.ProductValue;

它被传递给 SQL 处理程序

                SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = m_Connection;
cmd.CommandText = "usp_ATP_Calendar_InsertUpdateEvent";
[...other params...]
cmd.Parameters.AddWithValue("@Start", eve.Start);
cmd.Parameters.AddWithValue("@Finish", eve.Finish);
cmd.Parameters.AddWithValue("@EventNote", eve.EventNote);

cmd.ExecuteNonQuery();

我已经在网页上添加了一个警报,该警报只是在保存事件时触发的 event.Start.toString() 。此示例显示了这一点:

Click for alert image

因此,我假设 10:00+0100 等于上午 9:00,这就是为什么我的事件被以“不同”时间记录的原因。任何人都可以建议处理此问题的最佳方法,并且也许提供一些示例代码,以便如果用户在上午 10:00 删除事件,即存储的时间?

最佳答案

除非您不想在应用程序中执行某些日期计算,否则最安全的方法是将所有值存储在 UTC 中,然后将它们转换为客户端的时区 - 这样您的代码实际上不会依赖于服务器执行它。

这意味着您不应该真正将上午 10:00 保存到您的商店,您首先将其转换为 UTC 会计客户端的时区。然后,当您想要显示时,将其转换回客户的时区。

这种方法并不普遍适用,因此请考虑检查链接1 , 23获取更多描述性信息。

关于javascript - C# DateTime - 使用 fullcalendar.io 处理时区的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50353803/

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