Javascript 如何基于用户执行操作';s服务器上的本地日期时间

Javascript 如何基于用户执行操作';s服务器上的本地日期时间,javascript,c#,asp.net-mvc,jscript,Javascript,C#,Asp.net Mvc,Jscript,我有一个ASP.NETMVC应用程序。我的服务器上也有一个调度程序。现在,用户可以根据本地时间指定何时需要执行某些操作 此外,当他们提交请求时,我使用以下JScript方法获取他们的UTC偏移量: var date = new Date(); var offset = date.getTimezoneOffset(); 使用该方法,我可以在服务器上使用以下C#方法来计算他们指定的时间是否等于他们的本地时间,如果是,我将执行该操作: DateTime.Now.ToUniversalTime().

我有一个ASP.NETMVC应用程序。我的服务器上也有一个调度程序。现在,用户可以根据本地时间指定何时需要执行某些操作

此外,当他们提交请求时,我使用以下JScript方法获取他们的UTC偏移量:

var date = new Date();
var offset = date.getTimezoneOffset();
使用该方法,我可以在服务器上使用以下C#方法来计算他们指定的时间是否等于他们的本地时间,如果是,我将执行该操作:

DateTime.Now.ToUniversalTime().AddMinutes((-1)*utcOffset);
现在,我认为当谈到夏时制时,这是一辆马车。因此,如果DST关闭,并且他们将计划设置为在4个月内运行,到那时,他们的偏移量将不同(即+/-60分钟)。所以我相信我的日程安排会提前或推迟一个小时

我如何解决这个问题?我曾经在Stackoverflow或其他地方遇到过许多类似的问题,但都没有找到合适的答案


感谢您的帮助。

当涉及时间计算/比较时,建议使用UTC时间

DateTime.UtcNow
您可以使用
AddHours()、AddMinutes()
函数将UTC时间转换为本周所需的时区

DateTime.UtcNow.AddHours()
DateTime.UtcNow.AddMinutes()

您还可以将日期和时间保存为UNIX时间毫秒。在客户端,您可以调用
const scheduledUnixtimemilures=new Date('2020-12-25 00:00:00.000Z').getTime()
函数以毫秒为单位获取当前UNIX时间并将其发送到服务器。一旦将其存储在那里,调度程序就可以在存储的时间和当前UNIX时间(以毫秒为单位)之间进行简单的比较,并运行计划的任务

// Sent from the client side using Date.getTime() on the declared date
long userScheduledUnixTimeMilliseconds = GetUserScheduledUnixTimeMilliseconds();
long currentUnixTimeMilliseconds = System.DateTimeOffset.Now.ToUnixTimeMilliseconds();

if (currentUnixTimeMilliseconds >= userScheduledUnixTimeMilliseconds)
{
    RunScheduledTask();
}

谢谢亚达斯的回复。我同意你的看法,但我遇到的问题与大多数情况有所不同。谢谢你的回复。所以这可能有效,但我需要更多的澄清。因此,
currentunixtimemissions
,以UxMs为单位,即使是在服务器上计算的,也没有任何区别,我们仍然可以使用它。然而,
userScheduledTime
,对我来说没有意义。您在评论中说,提交请求时是用户/客户的时间,因此,这不是他们心目中的预定日期/时间。这意味着它不能用于比较和触发任务。“我可能没听清你的意思。”斯塔克杜普对不起,我第一次把事情搞砸了。用户可能不会为当前时间安排任何事情(愚蠢的我)。您可以在任何JS
Date
对象上使用
getTime
函数来获取其声明日期的UNIX时间毫秒。感谢您的澄清。不幸的是,我无法获得客户未来日期的详细信息。这主要是因为,用户可以组合包含不同类型日期的指令,并将其发送到服务器,然后在服务器上解析这些指令。这就是为什么我需要一些机制,在那里我可以使用他们的
区域设置和当前日期
信息在服务器上决定未来的日期。