如何在asp.net中获取客户当前的日期和时间?

时间:2012-12-05 06:23:31

标签: c# asp.net jquery

我的母版页中有一个隐藏字段。我使用Javascript将当前日期和时间设置为“hiddenfield”中的值。我无法在任何其他页面的页面加载方法中获取此隐藏字段值。

这是我的代码。

HiddenField hdnCurrentDate = (HiddenField)this.Master.FindControl("hdnCurrentDate");
                ClientScript.RegisterClientScriptBlock(this.GetType(), "Message", "var CurrentDate = new Date(); $('#" + hdnCurrentDate.ClientID + "').val(CurrentDate);alert($('#ctl00_hdnCurrentDate').val());", true);

我在主页中定义了Hiddenfield,如

<asp:HiddenField ID="hdnCurrentDate" runat="server" />

我收到警告“hdnCurrentDate”未定义。这是因为我在页面加载中编写了代码而不是回发方法。

这是我实施的另一种方式。

我在后面的代码中使用了ConvertTimeBySystemTimeZoneId。这是相同的代码。

DateTime ClientDateTime = DateTime.Now;
        DateTime _localTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(ClientDateTime, "Arab Standard Time");
        return _localTime;

我没有获得目的地时区ID而不是“阿拉伯标准时间”。如果我能得到它,我的问题就会得到解决。

有没有其他方法可以在我的任何页面中获取当前日期时间。我不想使用Session和cookies。

提前致谢。

6 个答案:

答案 0 :(得分:3)

以下是获取客户当前日期时间的javascript函数:

<script type="text/javascript">
function GetDate(date) {
    CurTime = new Date(date);
    var offset = (new Date().getTimezoneOffset() / 60) * (-1);
    var utc = CurTime.getTime() + (offset * 60000 * (-1));
    var serverDate = new Date(utc + (3600000 * offset));
    var dateString = (serverDate.getMonth() + 1) + "/" + serverDate.getDate() + "/" +     
serverDate.getFullYear() + " " + serverDate.toLocaleTimeString("en-US", { hour12: true });
}
</script>

您还可以从后面的代码中获取OffSet Time,如下所示:

public static TimeSpan GetOffSetTime(string date)
    {
        DateTime d = Convert.ToDateTime(date);
        TimeZone zone = TimeZone.CurrentTimeZone;
        TimeSpan local = zone.GetUtcOffset(d);
        return local;
    }

答案 1 :(得分:2)

我是通过以下方式完成的:

  1. 我已将HiddenField带到上一页所需的位置:

    <asp:HiddenField ID="hdnTimeOffset" ClientIDMode="Static" runat="server" 
     Value="" />
    
  2. 然后,我得到了浏览器时区:

    $(document).ready(function () {
         var offset = new Date().getTimezoneOffset();
         $('#hdnTimeOffset').val(offset);
    
     });
    
  3. 我正在将时区转换为上一页的Session变量,然后重定向到下一页,例如按钮点击:

    protected void btn_Click(object sender, EventArgs e)
    {
        Session["TimeOffset"] = hdnTimeOffset.Value;
        Response.Redirect("~/Root/abc.aspx");
    }
    
  4. 在主页面中,我使用以下代码获取当前时间:

    DateTime dtmCurrentDateTime = DateTime.Now.ToUniversalTime();
    double dblMinutes =Convert.ToDouble(Session["TimeOffset"].ToString());                
    dtmCurrentDateTime = dtmCurrentDateTime.AddMinutes(-dblMinutes);
    

答案 2 :(得分:0)

'有没有其他方法可以在我的任何页面中获取当前日期时间。我不想使用Session和cookies。' 在这种情况下你可以使用JavaScript

此外,您不需要使用RegisterStartupScript。您只需在GetDate()事件中调用onLoad函数即可。

<script type="text/javascript">

    window.onload = function(){
        getDate();
    };

    function GetDate() 
    {
        var dt = new Date();
        var element = document.getElementById("MainContent_FormView1_Label1");

        element.text = dt.toDateString();
    }
</script>

但是,您可能需要阅读this SO thread了解使用window.onload的最佳做法,或考虑使用jQuery及其document.ready等框架

答案 3 :(得分:0)

母版页

设置servertime

<asp:hiddenfield runat="server" id="HiddenField1"></asp:hiddenfield>

protected void Page_Load(object sender, EventArgs e)
{
    HiddenField1.Value = DateTime.Now.ToString();
}

设置客户端机器时间

 <script type="text/javascript">
        function setvalue() {
            document.getElementById('HiddenField1').value = new Date();
        }
    </script>
   <body onload="setvalue();">
    <form id="form1" runat="server">
    <div>
        <asp:HiddenField ID="HiddenField1" runat="server"/>
    </div>
    </form>
    </body>

内容页面

HiddenField hdnvalue = this.Master.Master.FindControl("HiddenField1") as HiddenField;
string currenttime=hdnvalue.Value;

答案 4 :(得分:0)

来自This link:

的修改代码
<script type="text/javascript">
function getDateTime()
{
    var localTime = new Date();
    var year= localTime.getYear();
    var month= localTime.getMonth() +1;
    var date = localTime.getDate();
    var hours = localTime .getHours();
    var minutes = localTime .getMinutes();
    var seconds = localTime .getSeconds();    
    //at this point you can do with your results whatever you please
}
</script>

此时我将所有字段连接在一起并将它们放在asp:HiddenField控件中,以便可以在服务器上读取它们。在服务器上,在HiddenField的Text值上调用Convert.ToDateTime()。

如果您不使用母版页,请尝试使用。

HiddenField hdnFieldValue = (HiddenField)PreviousPage.FindControl("hdnField");

<强>更新

在页面上放置一个隐藏字段。

<asp:HiddenField ID="hidChild" runat="server"/>

在你的javascript函数中

 var childHidden = document.getElementById('<%hidChild.ClientID%>');
 childHidden.value = window.opener.document.getElementById('text1').value;

现在在页面加载事件上访问此隐藏控件。

Response.Write(hidChild.Value); or Session["ParentVal"]=hidChild.Value;

答案 5 :(得分:0)

如何使用C#中的CulturalInfo获取它?

  

string currentFormat = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern;

这将以客户端中的任何格式返回“ dd / MM / yy”或“ dd / M / YYY”