MVC 에서 ajax 호출 날짜 차이 계산

20791 단어 Ajax
배경:
서비스 항목 이미 서비스 기간 시작 시간 From - To
현재 사용자 가 입력 한 새로운 시작 시간 과 이 서비스 기간 의 기 존 구간 값 에 따라 새로운 서비스 기간 마감 시간 을 계산 해 야 합 니 다.
즉 NewServiceToDateTime = NewServiceFromDateTime + (OldServiceToDateTime - OldServiceFromDateTime)
 
이 예제 의 효과:
1. 날짜 변환 및 차액 계산
2. mvc 에서 ajax 호출 및 할당
 
관련 코드 는 다음 과 같 습 니 다.
백 스테이지 컨트롤 러 아래 액 션 처리
public DateTime GetDateTimeParseStr(string strDate,string strDateH,string strDateM) {
            DateTime dt = new DateTime();
            if (strDate.Contains("/"))
            {
                dt = DateTime.ParseExact(strDate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture);

            }
            else if (strDate.Contains("-"))
            {
                dt = DateTime.ParseExact(strDate, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
            }
            else
            {
                dt = DateTime.Parse(strDate);
            }

            if (!string.IsNullOrEmpty(strDateH)) {
                dt = dt.AddHours(int.Parse(strDateH));
            }

            if (!string.IsNullOrEmpty(strDateM))
            {
                dt = dt.AddMinutes(int.Parse(strDateM));
            }
            
            return dt;
        }

        public DateTime GetNewToDateTime(DateTime from, DateTime to, DateTime newFrom)
        {
            TimeSpan tsFrom = new TimeSpan(from.Ticks);
            TimeSpan tsTo = new TimeSpan(to.Ticks);
            TimeSpan tsNewFrom = new TimeSpan(newFrom.Ticks);


            DateTime dtNewTo = newFrom.AddTicks(tsTo.Subtract(tsFrom).Ticks);

            return dtNewTo;
        }

        public JsonResult GetNewToDateTimeJson(string strFrom,string strFromH,string strFromM
            ,string strTo,string strToH ,string strToM,
            string strFromNew, string strFromHNew, string strFromMNew)
        {

            try
            {
                DateTime from = GetDateTimeParseStr(strFrom, strFromH,strFromM);
                DateTime to = GetDateTimeParseStr(strTo, strToH, strToM);
                DateTime newFrom = GetDateTimeParseStr(strFromNew, strFromHNew, strFromMNew); 

                DateTime dtNewTo = GetNewToDateTime(from, to, newFrom);

                return Json(new
                {
                    Success = true
                    ,
                    ServiceToDateTitle = dtNewTo.FormatDateAndTimeNoSecond()
                    ,
                    ServiceToDate = dtNewTo.ToString("yyyy-MM-dd")
                    ,
                    ServiceToDateH = dtNewTo.Hour.ToString().PadLeft(2, '0')
                    ,
                    ServiceToDateM = dtNewTo.Minute.ToString().PadLeft(2, '0')
                }, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(new
                {
                    Success = false
                }, JsonRequestBehavior.AllowGet);
            }
            

        }

프론트 aspx 의 Ajax 호출
<script type="text/javascript">

    function changeServicePeriod() {
        var dateFrom = $("#ServiceFromDate").val();
        var datefromHH = $("#ServiceFromDateH").val();
        var dateFromMM = $("#ServiceFromDateM").val();

        if (dateFrom != "") {
            var item = eval("(" + $("#itemdata").val() + ")");

            var dateFromOld = item.ServiceFromDate;
            var dateFromHHOld = item.ServiceFromDateH;
            var dateFromMMOld = item.ServiceFromDateM;

            var dateToOld = item.ServiceToDate;
            var dateToHHOld = item.ServiceToDateH;
            var dateToMMOld = item.ServiceToDateM;

            var url = '<%=Url.Action("GetNewToDateTimeJson", "ServiceItem") %>';
            $.ajax({
                type: "get",
                async: false,
                url: url,
                data: {
                    strFrom: dateFromOld
                  , strFromH: dateFromHHOld
                  , strFromM: dateFromMMOld
                  , strTo: dateToOld
                  , strToH: dateToHHOld
                  , strToM: dateToMMOld
                  , strFromNew: dateFrom
                  , strFromHNew: datefromHH
                  , strFromMNew: dateFromMM
                },
                dataType: "json",
                success: function (jsonData, textStatus) {
                    if (jsonData.Success) {
                        $("#ServiceToDateTitle").val(jsonData.ServiceToDateTitle);
                        $("#ServiceToDate").val(jsonData.ServiceToDate);
                        $("#ServiceToDateH").val(jsonData.ServiceToDateH);
                        $("#ServiceToDateM").val(jsonData.ServiceToDateM);
                    } else {
                        $("#ServiceToDate").val("");
                        $("#ServiceToDateTitle").val("");
                        $("#ServiceToDateH").val(datefromHH);
                        $("#ServiceToDateM").val(dateFromMM);
                    }
                },
                complete: function (XMLHttpRequest, textStatus) { },
                error: function () { }
            });        // end ajax

        } else {
            $("#ServiceToDate").val("");
            $("#ServiceToDateTitle").val("");
            $("#ServiceToDateH").val(datefromHH);
            $("#ServiceToDateM").val(dateFromMM);
        }

    };

</script>

좋은 웹페이지 즐겨찾기