jQuery datepicker的dateFormat - 如何与.NET当前文化DateTimeFormat集成

时间:2011-12-16 07:46:42

标签: jquery asp.net-mvc asp.net-mvc-3 jquery-ui jquery-ui-datepicker

我在.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插件中?

谢谢,帕维尔

3 个答案:

答案 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>