将格式化日期从WebMethod返回到JSON

时间:2014-01-22 22:27:38

标签: c# jquery ajax json

我有一个在日期{“d”返回的WebMethod:[“/ Date(1390411800000)/”]}:

[WebMethod]
    public static object getBreadCrumbDate(int projectID, int statusID)
    {
        using (dbPSREntities5 myEntities = new dbPSREntities5())
        {
            var thisId = myEntities.tbBreadCrumbs.Where(x => x.ProjectID == projectID && x.StatusID == statusID).Max(x => x.BreadCrumbID);
            var columns = myEntities.tbBreadCrumbs.Where(x => x.BreadCrumbID == thisId)
                                                  .Select(x => x.CreateDateTime).ToList();

            return columns;
        }
    }

我希望将其格式化为“mmm dd,yy”(1月22日,14日)并将其返回给调用的AJAX但不确定最佳方式。这是我的AJAX:

function getBreadCrumbDate(projectID, statusID) {
        $.ajax({
            url: "view-requests.aspx/getBreadCrumbDate",   // Current Page, Method
            data: JSON.stringify({
                projectID: projectID,
                statusID: statusID
            }), // parameter map as JSON
            type: "POST", // data has to be POSTed
            contentType: "application/json", // posting JSON content    
            dataType: "JSON",  // type of data is JSON (must be upper case!)
            timeout: 10000,    // AJAX timeout
            success: function (result) {
                $("#divApprovedStatus").html(result.d[0]);
            },
            error: function (xhr, status) {
                alert(status + " - " + xhr.responseText);
            }
        });
    }

现在它打印出/日期(1390411800000)/但希望它格式化。成功之后在jQuery中做最好还是在返回C#时做到最好?无论哪种方式,我不知道该怎么做,可以使用一些指针。 谢谢!

它显示了一些红线......你想让我告诉你他们说什么吗? enter image description here

2 个答案:

答案 0 :(得分:2)

我认为使用ToString([time format])以正确的格式在C#中进行此操作最简单。

既然你有一个DateTime?要访问Nullable<DateTime>值的对象(称为DateTime),您必须使用Value的{​​{1}}属性(DateTime?属性存在于所有{ {1}}。

对于“1月22日,14日”,格式如下:

这些只是语法的一些通用示例:

Value

此外,您正在使用Entity Framework将您的LINQ语句转换为SQL。

基本上你必须首先提取数据,然后格式化它。即使Nullable Types// DateTime object someDateTimeInstance.ToString("MMM d, yy"); // DateTime? object someNullableDateTimeInstance.Value.ToString("MMM d, yy"); // assumes no nulls // DateTime? object with null check String formattedDateTime = (null != someNullableDateTimeInstance ? someNullableDateTimeInstance.Value.ToString("MMM d, yy") : string.Empty); 列,整个表达式也会由Linq-To-Entities转换为SQL。而且,Linq-To-Entities不知道如何翻译方法调用CreateDateTime

通过将查询与格式调用分开,我们避免了这个问题。您从实体获取数据,并调用Nullable<DateTime>,这将导致EF将数据加载到内存中。然后,您可以使用包含.ToString(string format)个对象的新列表,并使用.ToList()方法获取格式化日期。

在您的代码中

DateTime?

答案 1 :(得分:1)

如果你可以使用datepicker,那么你可以定义一个JavaScript函数

  getDateFromJson: function(jsonDateString, languageCode) {
        return $.datepicker.formatDate($.datepicker.regional[languageCode].dateFormat, new Date(parseInt(jsonDateString.substr(6), 10)));
    }

然后你可以为datepicker定义一个i18n文件为

jQuery(function ($) {
   $.datepicker.regional['en-us'] = {
       closeText: 'Done',
       prevText: 'Prev',
       nextText: 'Next',
       currentText: 'Today',
       monthNames: ['January', 'February', 'March', 'April', 'May', 'June',
    'July', 'August', 'September', 'October', 'November', 'December'],
       monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
       dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
       dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
    weekHeader: 'Wk',
    dateFormat: 'mm/dd/yy',
    firstDay: 1,
    isRTL: false,
    showMonthAfterYear: false,
    yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['en-us']);
});

//German

   jQuery(function($){
$.datepicker.regional['de'] = {
    closeText: 'schließen',
    prevText: '&#x3c;zurück',
    nextText: 'Vor&#x3e;',
    currentText: 'heute',
    monthNames: ['Januar','Februar','März','April','Mai','Juni',
    'Juli','August','September','Oktober','November','Dezember'],
    monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
    'Jul','Aug','Sep','Okt','Nov','Dez'],
    dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
    dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
    dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
    weekHeader: 'KW',
    dateFormat: 'dd.mm.yy',
    firstDay: 1,
    isRTL: false,
    showMonthAfterYear: false,
    yearSuffix: ''};
$.datepicker.setDefaults($.datepicker.regional['de']);
 });

所以你可以为它定义你的语言和日期格式。

现在,当您需要日期时,只需调用此函数

即可
getDateFromJson(result.d[0], 'en-us'); //for USA Date
getDateFromJson(result.d[0], 'de'); //for German Date

希望这能指出你正确的方向!