【问题标题】:How to get Client PC Date&Time in Page_Load event如何在 Page_Load 事件中获取客户端 PC 日期时间
【发布时间】:2014-03-21 02:45:10
【问题描述】:

实际上,我正在开发一个诊所管理系统,我需要在一个屏幕中显示添加到队列中的今天的患者。
为此:我打电话给DateTime.Now;
实际上,我的主机服务器在加拿大位置,而我在马来西亚。所以,两者之间有 12 小时的时间间隔,直到下午 12 点才显示记录。
在谷歌搜索解决方案时,我通过 JavaScript 找到了一个解决方案。

 <label id="lblTime" runat="server" style="font-weight: bold"></label> 

 <script type="text/javascript">
        $(document).ready(function () {
            ShowTime();
        });

        function ShowTime() {
            var dt = new Date();
            document.getElementById("lblTime").innerHTML = dt.toLocaleTimeString();
            window.setTimeout("ShowTime()", 1000); // Here 1000(milliseconds) means one 1 Sec  
        }
    </script>

实际上,它显示的是时间,但是当我得到后面代码上的文本时,它给了我一个空字符串。

string strrr = lblTime.InnerHtml.ToString();

谁能指导我完成这个? 我做错了吗? 有没有其他方法可以做到这一点?

实际上,我需要!isPostbackPage_load 中的日期和时间

【问题讨论】:

  • JavaScript 中的 new Date() 将使用您的 浏览器 时钟和本地时区。 .NET 中的DateTime.Now 将使用您的服务器的 时钟和本地时区。你到底在这里问什么?
  • 其实,我需要Server端的ClientTime,这样我就可以根据他的时间显示他今天的记录
  • 您如何确定他的时钟设置正确?您可能想要的是 服务器时间 但已转换为客户端的时区。
  • 实际上,您必须回答很多问题才能继续。例如,您说“我需要展示今天的患者”。那么,你是指谁的日子?此外,您说“我的主机服务器在加拿大”,但如果您做得正确,您不应该调用DateTime.Now,而是调用DateTime.UtcNow,因此主机服务器时区变得无关紧要。除了您在这里获得的一些 javascript 之外,还有许多其他问题。
  • 是的。你是对的。客户也有可能设置错误的时间。实际上,我需要获取服务器时间并根据 ClientTimeZone 进行转换。你能帮帮我吗?

标签: c# javascript asp.net .net datetime


【解决方案1】:

ShowTime() 将在 Page_Load 之后执行。你目前的设计行不通。

您可以使用 jQuery ajax 调用代码隐藏方法并将客户端日期/时间传递给它。

看这篇文章:http://coderskey.blogspot.com/2013/04/how-to-call-code-behind-function-using.html

这是一个代码片段。您将希望改为“SetCurrentTime”。

function ShowCurrentTime() {
$.ajax({
    type: "POST",
    url: "CS.aspx/GetCurrentTime",
    data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: OnSuccess,
    failure: function(response) {
        alert(response.d);
    }
});

}

function OnSuccess(response) {
    alert(response.d);
}

【讨论】:

    【解决方案2】:

    您可能希望将日期和时间字符串传递回服务器,该字符串是 UTC 或具有本地时区偏移的本地时间。对于前者,使用toISOString 方法,该方法返回 ISO 8601 格式的 UTC 日期和时间:

    var now = new Date();
    
    var UTCString = now.toISOString(); // 2014-03-21T03:28:52.531Z
    

    对于后者,您必须自己构建字符串:

    function toLocalISOString(d) {
    
      function pad(n){
        var sign = n < 0? '-' : '';
        n = Math.abs(n);
        return sign + (n<10? '0' : '') + n;
      }
    
      function minsToHHMM(n){
        var hh = pad(n/60 |0);
        var mm = pad(Math.abs(n%60));
        return  hh + '' + mm;
      }
    
      var offset = minsToHHMM(d.getTimezoneOffset() * -1);
    
      return d.getFullYear() + '-' + pad(d.getMonth() + 1) + '-' + pad(d.getDate()) +
             'T' + pad(d.getHours()) + ':' + pad(d.getMinutes()) + ':' + pad(d.getSeconds()) +
             (offset<0?'-' : '+') + offset;
    }
    
    toLocalISOString(now); // 2014-03-21T14:28:52+1100
    

    请注意,javascript 中的时区偏移量以分钟为单位,并且与通常的偏移量具有相反的符号,例如UTC1000 为 -600,UTC-0530 为 330。以上忽略毫秒,如果需要,可以将它们包含为十进制秒。

    也可以容纳其他格式。

    【讨论】:

      【解决方案3】:

      我想我找到了答案。
      我点击了链接:Here
      但无法在 Page_load 中获取日期和时间。
      需要为 PostBack 完成诸如 Ajax 调用之类的操作。
      我计划在 !ispostback 事件之后立即使用 Timer 然后 postback 页面,然后我将制作 Timer 启用 False
      谁能提出比这更好的解决方案?

      【讨论】:

        猜你喜欢
        • 2011-12-09
        • 2010-09-21
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-10
        相关资源
        最近更新 更多