Javascript CRM OData日期时区问题

Javascript CRM OData日期时区问题,javascript,dynamics-crm,dynamics-crm-2015,Javascript,Dynamics Crm,Dynamics Crm 2015,我遇到了一个问题,CRM似乎没有用OData正确处理日期时间。具体地说,我们正在尝试使用对CrmRestKit的JavaScript调用创建一个名为new_vod的自定义记录,该记录具有开始时间和结束时间(为了简单起见,我从这里删除了一些其他属性)。当执行此功能的用户与服务器不在同一时区时,无论服务器和用户之间的偏移量是多少,时间都是不正确的 例如,如果我的CRM用户在Mountain Time,而服务器在Eastern Time,则在CRM中查看新创建的记录时,开始时间将是从现在开始的2小时(

我遇到了一个问题,CRM似乎没有用OData正确处理日期时间。具体地说,我们正在尝试使用对CrmRestKit的JavaScript调用创建一个名为new_vod的自定义记录,该记录具有开始时间和结束时间(为了简单起见,我从这里删除了一些其他属性)。当执行此功能的用户与服务器不在同一时区时,无论服务器和用户之间的偏移量是多少,时间都是不正确的

例如,如果我的CRM用户在Mountain Time,而服务器在Eastern Time,则在CRM中查看新创建的记录时,开始时间将是从现在开始的2小时(即使应该是现在)。用户计算机的时区似乎对结果没有任何影响。(我将“new_starttime”与“Created On”时间进行比较,以确认我不仅仅是查看了错误的数据,而且在本场景中,创建的时间比开始时间早2小时)

以下是相关片段:

var startTime = new Date();

//Add 90 minutes to the current date/time
var endTime = new Date();
endTime.setMinutes(startTime.getMinutes() + 90);

//Create a cvt_VOD record
var newVOD = {
    'new_starttime': startTime,
    'new_endtime': endTime
};

var createdVOD = CrmRestKit.Create('new_vod', newVOD)
...
我注意到,当我在前期插件中调试创建新的_vod记录时,到UTC的“转换”已经发生错误,因此我认为Rest调用本身是不对的

有人能解释为什么会发生这种情况吗


仅供参考,我们正在使用CRM 2015内部部署

尝试Somesh提供的工作解决方案:


尝试Somesh提供的工作解决方案:


感谢您的回复。当我最初研究这个问题时,我看到了这个页面。我认为这是不完整的。似乎正在执行核心工作的函数接受一个名为“currentAccount”的输入参数,并且该参数的日期时间值似乎已经被转换。我想看看转换是如何完成的。另一个缺点是,这个解决方案要求用户选择一个没有任何时区的日期时间,而不是通过编程立即获取时间。我有点不清楚这里的建议是什么。有3个警报,所以我尝试将这些值放入这些警报中,以替换startDate和EndDate。我的结果:第一个是我一直在尝试的,所以结果是相同的,第二个警报的结果是相同的,第三个警报的结果是关闭了数小时的时间。基本上,CRM服务器上下文会将您经过的日期时间转换为UTC以存储在DB中。如果您使用datetime.now从客户端传递日期时间,则将采用计算机设置。因此,您必须对其进行反向工程,以与服务器时间相匹配。我给了jsfiddle来处理.toISOString()和.getTimezoneOffset(),以便对所需内容进行反向工程。明白了吗?谢谢你的回复。当我最初研究这个问题时,我看到了这个页面。我认为这是不完整的。似乎正在执行核心工作的函数接受一个名为“currentAccount”的输入参数,并且该参数的日期时间值似乎已经被转换。我想看看转换是如何完成的。另一个缺点是,这个解决方案要求用户选择一个没有任何时区的日期时间,而不是通过编程立即获取时间。我有点不清楚这里的建议是什么。有3个警报,所以我尝试将这些值放入这些警报中,以替换startDate和EndDate。我的结果:第一个是我一直在尝试的,所以结果是相同的,第二个警报的结果是相同的,第三个警报的结果是关闭了数小时的时间。基本上,CRM服务器上下文会将您经过的日期时间转换为UTC以存储在DB中。如果您使用datetime.now从客户端传递日期时间,则将采用计算机设置。因此,您必须对其进行反向工程,以与服务器时间相匹配。我给了jsfiddle来处理.toISOString()和.getTimezoneOffset(),以便对所需内容进行反向工程。清楚的