我在.NET ASP MVC3内部网应用程序中使用jQuery的datepicker插件。使用应用程序的用户在不同国家和地区设有办事处。这就是我想将 Thread.CurrentThread.CurrentCulture.DateTimeFormat 与 jQuery datepicker插件集成的原因。我的第一个解决方案是创建辅助扩展方法:
public static string jQueryDatePickerFormat(this HtmlHelper helper)
{
return Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
}
并在javascript中设置 dateFormat 选项,如下所示:
$("#StartDate").datepicker({ dateFormat: '@Html.jQueryDatePickerFormat()' });
我意识到datepicker的 dateFormat 选项支持的格式与.NET中的格式不同。
例如:pl-PL的 Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern 返回 yyyy-MM-dd (它将日期格式化为2010-01-01 ),而 datePicker 中的相同格式将格式化与 20102010 January 01 相同的日期。我很快调整了我的辅助方法并应用了快速修复替换(“yyyy”,“yy”)。替换(“MM”,“mm”):
public static string jQueryDatePickerFormat(this HtmlHelper helper)
{
return Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.Replace("yyyy", "yy").Replace("MM", "mm");
}
我工作,但我等待其他问题出现的那一刻。有没有简单的方法将.NET语言环境设置实现到jQuery的datePicker插件中?
谢谢,帕维尔
答案 0 :(得分:5)
ASP.NET MVC中的codeproject文章JQueryUI Datepicker http://www.codeproject.com/Articles/62031/JQueryUI-Datepicker-in-ASP-NET-MVC具有完全符合您要求的功能
/// Converts the .net supported date format current culture
/// format into JQuery Datepicker format.
/// </summary>
/// <param name="html">HtmlHelper object.</param>
/// <param name="format">Date format supported by .NET.</param>
/// <returns>Format string that supported in JQuery Datepicker.</returns>
public static string ConvertDateFormat(this HtmlHelper html, string format)
我还发布了一个相反的功能 - Translate jQuery UI Datepicker format to .Net Date format
答案 1 :(得分:0)
前段时间我已经解决了同样的问题。我采取的路径只是将jQuery datepicker提供给我的任何东西转换为milis(.getTime())。知道javascript时间基于1,1,1970的日期和.NET上的1,1,0我能够在我的控制器端进行计算
因此,假设您将javscript DateTime.getTime()值传递给控制器,您可以;
var myDate = new DateTime(1970, 1, 1) + new TimeSpan(time * 10000);
在你看来你可以;
$.datepicker.setDefaults($.datepicker.regional["pl"]);
$("#StartDate").datepicker({
dateFormat: "yy-mm-dd",
onSelect: function (dateText) {
var currentDate = new Date(dateText);
time = currentDate.getTime();
// $.post | $.ajax here - whatever you need
}
});
您需要记住TimeZones以及javascript在计算日期时将其考虑在内的事实。
答案 2 :(得分:0)
存储在隐藏字段中
<input id="dateFormate" type="hidden"
value='@System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.ToLower().Replace("yyyy", "yy")'/>
@Html.HiddenFor(model=>model.StartDate)
@Html.HiddenFor(model=>model.EndDate)
<input type="text" id="tbStartDate" value="" disabled="disabled" />
<input type="text" id="tbEndDate" value="" disabled="disabled" />
<script type="text/javascript">
$(document).ready(function () {
$("#tbStartDate").datepicker({
dateFormat: $('#dateFormate').val(),
showOn: 'button',
buttonImageOnly: true,
buttonImage: '/Content/Calendar.png',
buttonText: 'Click here (date)',
onSelect: function (dateText, inst) {
var $endDate = $('#tbStartDate').datepicker('getDate');
$endDate.setDate($endDate.getDate() + 1);
$('#tbEndDate').datepicker('setDate', $endDate).datepicker("option", 'minDate', $endDate);
},
onClose: function (dateText, inst) {
$("#StartDate").val($("#tbStartDate").val());
}
});
$("#tbEndDate").datepicker({
dateFormat: $('#df').val(),
showOn: 'button',
buttonImageOnly: true,
buttonImage: '/Content/Calendar.png',
buttonText: 'Click here (date)',
onClose: function (dateText, inst) {
$("#EndDate").val($("#tbEndDate").val());
}
});
var $endDate = $('#tbStartDate').datepicker('getDate');
$endDate.setDate($endDate.getDate() + 1);
$('#tbEndDate').datepicker('setDate', $endDate).datepicker("option", 'minDate', $endDate);
});
</script>