JavaScript GetDate 无法跨区域工作

标签 javascript asp.net

我有一些 JS 代码,它接收客户端的日期/时间并将其传递到服务器,如下所示:

function SetPostbackValues() {
        //Function that gets the client machine datetime and stores it in a hidden field
        // so it may be used in code behind.
        var date = new Date();
        var day = date.getDate();        // yields day
        if (day < 10)
            day = '0' + day;
        var month = date.getMonth() + 1;    // yields month
        if (month < 10)
            month = '0' + month;
        var year = date.getFullYear();  // yields year
        var hour = date.getHours();     // yields hours
        if (hour < 10)
            hour = '0' + hour;
        var minute = date.getMinutes(); // yields minutes
        if (minute < 10)
            minute = '0' + minute;
        var second = date.getSeconds(); // yields seconds
        if (second < 10)
            second = '0' + second;

        var time = day + "/" + month + "/" + year + " " + hour + ':' + minute + ':' + second;
        var hiddenControl = '<%= hfDateTime.ClientID %>';
        document.getElementById(hiddenControl).value = time;
    }

我的问题是,当客户端时区设置设置为英国标准 dd/MM/yyyy 时,代码工作正常,但是当美国客户端连接时,转换为 DateTime 会引发错误,指出它不正确格式。

因为我分别获取每个月、日、年并将它们组合起来,所以我不明白为什么它不能跨不同区域设置工作。

尝试将日期时间插入 SQL 时发生错误:

using (SqlCommand cmd = new SqlCommand("Remove", con))
                    {
                        string test = (this.Master.FindControl("hfDateTime") as HiddenField).Value;
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.Add("@RemovalDate", SqlDbType.DateTime).Value = (this.Master.FindControl("hfDateTime") as HiddenField).Value; //Get the client's datetime.
                        con.Open();
                        insertedRecordID = (int)cmd.ExecuteScalar();
                    }

错误是{“无法将参数值从字符串转换为日期时间。”}

测试的值是:“19/02/2016 10:55:45”,这对我来说没有问题。

最佳答案

我认为你应该使用这个:

function SetPostbackValues() {
    var date = new Date();        
    var hiddenControl = '<%= hfDateTime.ClientID %>';
    document.getElementById(hiddenControl).value = date.toISOString();
}

并将代码隐藏更改为

cmd.Parameters.Add("@RemovalDate", SqlDbType.DateTime).Value = DateTime.Parse((this.Master.FindControl("hfDateTime") as HiddenField).Value);

关于JavaScript GetDate 无法跨区域工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35502595/

相关文章:

javascript - sweetalert2 取消计时器/超时

javascript - 如何用当前日期添加 5 天并在 momentjs 中格式化输出?

ASP.NET TreeView 性能

c# - 对象有关系时使用LINQ to SQL添加记录有什么秘诀吗?

c# - HttpRequestValidationException 显示 YSOD 尽管 customErrors 部分

javascript - 如何使用参数获取 Javascript 中的当前日期

javascript - 如果没有用户生成的内容,网站是否可以免受 XSS 攻击?

javascript - {this.props.children} 返回 null

ASP.Net 注销代码块

jquery - ASP.Net/AJAX - 使用 c# 在 asp.net 中动态加载用户控件后,事件不会触发