【问题标题】:Sending the date from client side or server side while filtering the data between 2 dates?在过滤两个日期之间的数据时从客户端或服务器端发送日期?
【发布时间】:2021-05-26 23:34:22
【问题描述】:

我有一个带有以下选项的选项卡:

Tab1         Tab2         Tab3                    Tab 4                     Tab 5
January   February    Last 3 Months           Last 6 Months            Last 12 Months

现在基于上面选择的选项卡,我想调用我的服务器端 API 并过滤掉数据。

方法一:

Public ActionResult FilterData(Datetime from, Datetime to)
{
    // Filter out data between 2 dates
} 

方法2:

Public ActionResult FilterData(string selectedTab) // Tab1 or Tab2 or Tab3 etc...
{
    if(selectedTab =="Tab1")
    {
        // Construct datetime object for Jan month
       //filter jan data;
       
    }
    ....
}

我看到第二种方法的唯一问题是我可能选择了不合适的日期,因为我将使用服务器端 api 获取日期和时间,而服务器的日期可能与客户端的日期不同。

如果有人能指引我正确的方向,我将不胜感激。

那么我应该采用哪种方法以及为什么?

【问题讨论】:

  • 服务器的日期可能与客户端的日期不同是什么意思?你的意思是因为时区?如果是这种情况,则需要在执行查询之前将本地时间转换为 UTC。
  • @Fran 是的,因为时区。所以你建议我应该采用第二种方法吗?
  • 不,我只是建议 1. 您要么需要通过时区并在某个地方进行翻译。在哪里取决于你。您的 api 可能只期望 UTC 时间。如果是这种情况,我会在客户端进行翻译,并且只传递 UTC 日期。但对我来说,方法 1 会更有意义。 API 对选项卡了解多少?这些是 UI 问题,应该保留在 UI 中。
  • @Fran 所以在客户端,我应该使用 javascript 来获取时区,然后构造日期,然后将其传递给服务器端 API?
  • 只使用内部的javascript Date 函数。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

标签: javascript asp.net ajax rest asp.net-web-api


【解决方案1】:

方法 2 提出了关注点分离问题。您将根据任意 UI 构造(选项卡及其序号位置)驱动 API 的行为。每个选项卡实际上代表一个时间段(1 个月、6 个月等),因此方法 1 是一种更具弹性的设计。如果每个使用 API 的客户端在调用 API 时将本地时间转换为祖鲁时间(可以,但很脆弱)或在提交的日期中包含时区标识符(更好),您可以轻松克服客户端在多个时区的挑战。

【讨论】:

  • 赞成您为帮助我所做的努力。因此,在调用我的 API 时,我应该使用 Javascript 来提取时区信息并将其传递给我的服务器端 api,或者在客户端本身构造 datetime 对象并将日期传递给服务器端 API?
  • 确保根据 API 的预期格式化 AJAX 调用中使用的日期,这是一种 ISO 8601 格式(请记住 JSON 没有用于表示日期的类型,它们只是字符串)。使用 JS 日期对象的 toISOString() 方法将日期转换为服务器可以理解的字符串。
猜你喜欢
  • 2015-07-20
  • 1970-01-01
  • 2013-04-19
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 2013-03-24
相关资源
最近更新 更多