我有一个asp.net网页,上面有一个jQuery datepicker。
我在英国,所以当我输入28/02/2010
时,我希望它可以解析为28th Feb 2010
。
这在我的本地开发环境中按预期工作 - 但不是我们的QA或类似prod的环境 - 或其他开发机器之一。在这些情况下,它似乎试图将其解析为美国日期格式 - 并且由于它超出范围而未通过验证。
jQuery似乎每次都会生成正确的日期 - 这让我觉得它可能是一个数据库问题。
我使用的是SQL Server 2005,我的排序规则为Latin1_General_CI_AS
,我的同事正在使用整理SQL_Latin1_General_CP1_CI_AS
和中文排字。
鉴于我们无法控制prod SQL Server安装(只是我们的数据库),以标准方式使这项工作的最佳方法是什么?更改数据库设置或使用它的代码?
提前致谢! - L
[编辑添加代码信息]
这是我调用datepicker的视图代码:
<%=Html.TextBox("DateOfBirth", Model.DateOfBirth.ToShortDateString(), new { @class = "datepicker" })%>
这是datepicker的js:
DatePickerSettings = {
setup: function () {
$(".datepicker").datepicker({
dateFormat: 'dd/mm/yy',
changeMonth: true,
changeYear: true
});
}
};
这就是我在模型中指定日期的方式:
[Required]
[DisplayName("Date of Birth")]
public virtual DateTime DateOfBirth { get; set; }
日期在控制器和存储库中显示正确...直到它到达数据库。
谢谢:)
答案 0 :(得分:2)
我希望等到你用更多信息更新问题,但是我已经看到一些答案表明你改变了用来与数据库交谈的 string 格式。 ..
不要在SQL查询中将日期作为原始文本发送。
使用参数化查询,这意味着您根本不必担心格式化值。然后你必须确保你可以在浏览器和ASP.NET之间获得正确的日期格式。
除了其他任何东西,如果你直接在SQL查询中包含用户数据,你通常会打开自己的SQL注入攻击。 始终使用参数化查询(除非您的网络应用真的“运行此SQL”测试工具...)
如果您已经在使用参数化查询,那么问题可能出在浏览器和ASP.NET之间,而数据库部分则无关紧要。划分和解决问题:在数据通过不同的层(浏览器,jQuery,ASP.NET等)时追逐数据,直到找到出错的地方。在你知道哪里出错之前,不要考虑修复。
答案 1 :(得分:1)
您的网页是否了解文化? 您可以确定不同浏览器(区域设置)的UI Cutlure信息,并使您的ASP.NET文化保持不变。
“文化”值确定与文化相关的功能的结果,例如日期,数字和货币格式等。 UICulture值确定为页面加载哪些资源
查看此MSDN链接: 如何:为ASP.NET网页全球化设置文化和UI文化
http://msdn.microsoft.com/en-us/library/bz9tc508(v=VS.85).aspx
答案 2 :(得分:0)
使用CONVERT
将日期格式更改为所有环境均可接受的标准。
答案 3 :(得分:0)
我必须看到解释日期的代码才能确定,但可能怀疑的是运行代码的机器上的区域和语言设置。确保它适合您所在的地区。
但是,如果您无法更改服务器上的设置,则应该在SQL Server中明确使用CAST或CONVERT强制它以您希望输入数据的区域特定方式对其进行解析。
答案 4 :(得分:0)
您还需要检查ASP.Net图层,看看它的运行情况。
检查机器配置并检查它们是否设置为在相同的日期/时间/区域中运行。
答案 5 :(得分:0)
更改您的代码以使用yyyymmdd格式。 据我所知,它适用于所有数据库
答案 6 :(得分:0)
为了在这里添加另一个意见,我发现dd / mmm / yyyy是发送到数据库的最佳日期格式,因为它在各种文化中都是完全明确的。