5

Estoy usando el plugin datepicker de jQuery en la aplicación de intranet ASP .NET MVC3. El usuario que usa la aplicación tiene oficinas en diferentes países y diferente ubicación. Es por eso que quería integrar Thread.CurrentThread.CurrentCulture.DateTimeFormat con jQuery datepicker plugin. Mi primera solución era crear método de extensión ayudante:jQuery datepicker's dateFormat - cómo integrar con .NET culture actual DateTimeFormat

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

y establecer opción dateFormat en javascript de esta manera:

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

Poco después me di cuenta que la opción dateFormat del selector de fecha compatible con los formatos que tienen diferentes implementación desde el formato en .NET.

Por ejemplo: Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern para pl-PL devuelve aaaa-MM-dd (será formato de fecha como 2010-01-01), mientras que el mismo formato en DatePicker formateará la misma fecha que 20102010 01 de enero. Rápidamente me adapté mi método de ayuda y se aplica una solución rápida Sustituir ("aaaa", "aa") Sustituir ("MM", "mm"):.

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

que funciona, pero esperar el momento cuando surjan otros problemas. ¿Hay alguna manera simple de implementar la configuración regional de .NET en el plugin datePicker de jQuery?

Gracias, Pawel

+0

hola, resolvió su problema? – torm

Respuesta

4

El artículo CodeProject jQueryUI selector de fechas en ASP.NET MVC http://www.codeproject.com/Articles/62031/JQueryUI-Datepicker-in-ASP-NET-MVC tiene la función que hace exactamente lo que quería

/// 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) 

También he publicado una función que hace lo opuesto tienda Translate jQuery UI Datepicker format to .Net Date format

0

He sumbled sobre el mismo problema hace algún tiempo. El camino que tomé fue simplemente convertir lo que jQuery datepicker me proporcionara a milis (.getTime()). Sabiendo que la hora de Javascript está basada en la fecha de 1,1,1970 y .NET en 1,1,0, puedo hacer el cálculo en mi lado del controlador

Suponiendo que está pasando el programa de escritura DateTime.getTime () valor para su controlador que pueda;

var myDate = new DateTime(1970, 1, 1) + new TimeSpan(time * 10000); 

en su vista podría;

$.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 
     } 
    }); 

Usted tendrá que recordar acerca de TimeZones y el hecho de que el javascript, lo tiene en cuenta para calcular fechas.

0

en el campo oculto

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