dateFormat jQuery datepicker - как интегрировать с текущей культурой .NET DateTimeFormat - PullRequest
5 голосов
/ 16 декабря 2011

Я использую плагин dateQicker jQuery в приложении интранет .NET ASP MVC3. У пользователя, использующего приложение, есть офисы в разных странах и разных регионах. Вот почему я хотел интегрировать Thread.CurrentThread.CurrentCulture.DateTimeFormat с плагином jQuery datepicker . Моим первым решением было создать вспомогательный метод расширения:

    public static string jQueryDatePickerFormat(this HtmlHelper helper)
    {
        return Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern;
    }

и установите параметр dateFormat в JavaScript следующим образом:

$("#StartDate").datepicker({ dateFormat: '@Html.jQueryDatePickerFormat()' });

Вскоре после того, как я понял, что опция datepicker dateFormat поддерживает форматы, реализация которых отличается от формата в .NET.

Например: Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern для pl-PL возвращает гггг-мм-дд (дата будет форматироваться как 2010-01-01), тогда как тот же формат в datePicker будет форматировать ту же дату, что и 20102010 января 01 . Я быстро адаптировал свой вспомогательный метод и применил быстрое исправление Заменить ("гггг", "гг"). Заменить ("ММ", "мм") :

    public static string jQueryDatePickerFormat(this HtmlHelper helper)
    {
        return Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern.Replace("yyyy", "yy").Replace("MM", "mm");
    }

Я работаю, но жду момента, когда возникнут другие проблемы. Есть ли какой-нибудь простой способ реализовать настройки языка .NET в плагине jQuery datePicker?

Спасибо, Pawel

Ответы [ 3 ]

5 голосов
/ 12 апреля 2012

Код проекта статьи JQueryUI Datepicker в ASP.NET MVC 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)

Я также разместил функцию, которая выполняет обратное действие - Переведите формат DatePicker пользовательского интерфейса jQuery в формат даты .Net

0 голосов
/ 26 июля 2012

хранить в скрытом поле

        <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>
0 голосов
/ 16 декабря 2011

Я столкнулся с той же проблемой некоторое время назад.Путь, который я выбрал, заключался в том, чтобы просто преобразовать любой предоставленный мне 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
        }
    });

Вы захотите вспомнить о часовых поясах и факте, что JavaScript учитывает этопри расчете дат.

...