5

Tôi đang sử dụng plugin datepicker của jQuery trong ứng dụng mạng nội bộ .NET ASP MVC3. Người dùng sử dụng ứng dụng có văn phòng ở các quốc gia khác nhau và ngôn ngữ khác nhau. Đây là lý do tại sao tôi muốn tích hợp Thread.CurrentThread.CurrentCulture.DateTimeFormat với jQuery datepicker plugin. Giải pháp đầu tiên của tôi là tạo ra phương pháp khuyến nông helper:Ngày của trình đặt trước jQueryFormat - cách tích hợp với văn hóa hiện tại .NET DateTimeFormat

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

và thiết lập DateFormat tùy chọn trong javascript như thế này:

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

Không lâu sau đó tôi nhận ra rằng DateFormat tùy chọn datepicker của hỗ trợ các định dạng có khác nhau thực hiện từ định dạng trong .NET.

Ví dụ: Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern cho pl-PL trả yyyy-MM-dd (nó sẽ định dạng ngày tháng như 2010/01/01), trong khi các định dạng tương tự trong datepicker sẽ định dạng cùng ngày với 20102010 01 tháng 1. Tôi nhanh chóng thích nghi phương pháp helper của tôi và áp dụng nhanh chóng sửa chữa Replace ("yyyy", "yy") Replace ("MM", "mm"):.

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

tôi làm việc, nhưng tôi chờ đợi cho thời điểm này khi các vấn đề khác sẽ xuất hiện. Có cách nào đơn giản để thực hiện cài đặt miền địa phương .NET vào plugin datePicker của jQuery không?

Cảm ơn, Pawel

+0

Xin chào, bạn đã giải quyết xong vấn đề ? – torm

Trả lời

4

Bài viết CodeProject jQueryUI datepicker trong ASP.NET MVC http://www.codeproject.com/Articles/62031/JQueryUI-Datepicker-in-ASP-NET-MVC có chức năng thực hiện chính xác những gì bạn muốn

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

Tôi cũng đã đăng một chức năng mà không được opposite- Translate jQuery UI Datepicker format to .Net Date format

0

Tôi đã gặp phải vấn đề tương tự cách đây một thời gian. Con đường tôi đã chỉ là để chuyển đổi bất cứ điều gì datepicker jQuery cung cấp cho tôi để milis (.getTime()). Biết rằng thời gian javascript dựa trên ngày là 1,1,1970 và .NET trên 1,1,0 tôi có thể thực hiện phép tính trên mặt điều khiển của mình

Giả sử bạn đang chuyển javscript DateTime.getTime () giá trị cho bộ điều khiển của bạn, bạn có thể;

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

theo cách bạn có thể;

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

Bạn sẽ muốn nhớ về múi giờ và thực tế javascript đưa vào tài khoản khi tính ngày.

0

cửa hàng trong trường ẩn

 <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> 
Các vấn đề liên quan