programing

표준 시간대를 사용하지 않고 AngularStrap 날짜 선택기 값을 전송하려면 어떻게 해야 합니까?

telecom 2023. 3. 6. 20:40
반응형

표준 시간대를 사용하지 않고 AngularStrap 날짜 선택기 값을 전송하려면 어떻게 해야 합니까?

사용자 로케일의 시간대 정보를 저장하지 않고 Angular Strap의 날짜 선택기를 사용할 수 있는지 궁금합니다.저희 어플리케이션에서는 유효기간이 있는 계약 오브젝트를 취급하고 싶습니다.

계약 객체를 추가하거나 편집할 때 날짜를 선택하기 위한 날짜 선택 필드가 있습니다.다음과 같은 일이 발생합니다.

  1. 사용자가 날짜를 선택합니다(예: 2013-10-24).
  2. Angular는 javascript 날짜 개체를 ng-model 필드에 바인딩합니다.
  3. 바인딩된 날짜 개체가 사용자의 시간대(예: GMT+3)에 있습니다.
  4. 사용자가 양식을 제출합니다.
  5. 날짜는 Angular의 $http 서비스를 사용하여 서버로 전송됩니다.

5단계에서는 날짜가 UTC 형식으로 변환됩니다.선택된 날짜는 자정 GMT+3 2013-10-24였지만 UTC 변환에 따라 날짜가 오후 9시에 2013-10-23으로 변경됩니다.

프로세스 전체에서 변환을 방지하거나 UTC 날짜를 사용하려면 어떻게 해야 합니까?계약 날짜가 사용자의 현지 시간대에 따라 변경되는 것을 원치 않습니다.그 대신에, 어느 시간대에 관계없이, 항상 2013-10-24 일자를 희망하고 있습니다.

현재의 솔루션은 AngularStrap 라이브러리에 작은 변경을 가하여 서버로 전송될 때 날짜가 변경되지 않도록 하는 것입니다.

사용자가 선택한 타임존을 서버에서 가져올 수 있으면 거기에서 다시 변환할 수 있지만 서버에는 해당 정보가 없습니다.

모든 아이디어 감사합니다!

문제는 Angular Strap이 아닙니다.javascript 날짜가 어떻게 동작하고 JSON이 전송을 위해 포맷하는 방식입니다.javascript 날짜 개체를 JSON 문자열로 변환하면 문자열 형식은 UTC로 지정됩니다.

예를 들어, 저는 유타에 있고 지금은 2013-10-24 07:41입니다.새로운 javascript 날짜를 생성하여 콘솔에 인쇄하면 다음과 같이 표시됩니다.

Thu Oct 24 2013 07:41:19 GMT-0600 (MDT)

같은 날짜를 문자열로 지정하면(사용)JSON.stringify(date)이해했습니다.

"2013-10-24T13:41:47.656Z"

현재 시간대는 아니지만 UTC에 있습니다.변환은 폼이 javascript 객체에서 JSON 문자열로 변환될 때 서버로 전송되기 직전에 이루어집니다.

가장 쉬운 방법은 서버에 날짜를 보내기 전에 원하는 문자열로 변경하는 것입니다.따라서 JSON이 날짜를 UTC로 변경하는 대신(하루 중 시간에 관계없이) 다음과 같은 작업을 수행할 수 있습니다.

var dateStrToSend = $scope.date.getUTCFullYear() + '-' + ($scope.date.getUTCMonth() + 1) +  '-' + $scope.date.getUTCDate();

UTC 이 UTC 기반 로 나타납니다.'2013-10-24'그런 다음 시간 정보를 포함하는 JSON 형식 대신 서버로 전송할 수 있습니다.그게 도움이 됐으면 좋겠어요.

@Matt Johnson: @Matt Johnson입니다.이 말했다: 신이했:::::::How could we prevent the conversion, or use UTC dates during the whole process?UTC 를 사용하고 싶은 경우는, 상기의 설명을 사용해 주세요.「변환 방지」만 하고 싶은 경우는, 다음을 사용할 수 있습니다.

var dateStrToSend = $scope.date.getFullYear() + '-' + ($scope.date.getMonth() + 1) +  '-' + $scope.date.getDate();

조금 늦었지만 오후 내내 이걸 썼는데 누군가 유용하다고 생각할지도 몰라요.

이를 선언적으로 수행하는 또 다른 방법은 dateType, dateFormat 및 modelDateFormat 속성을 사용하는 것입니다.설정 또는 HTML 중 하나로 설정합니다.

angular.module('app').config(function ($datepickerProvider) {
    angular.extend($datepickerProvider.defaults, {
        dateFormat: 'dd-MMMM-yyyy',
        modelDateFormat: "yyyy-MM-ddTHH:mm:ss",
        dateType: "string"
    });
});

DateFormat은 달력 선택기에 표시되는 날짜 형식이며 modelDateFormat은 모델에 바인딩되기 전에 변환되는 형식입니다.

또, 서버로부터의 디폴트치가 있어, 페이지 로드시에 데이터 피커에 바인드 할 필요가 있었습니다.따라서 JSON의 서버 시리얼 날짜 포맷을 modelDateFormat과 일치하도록 업데이트해야 했습니다.저는 웹 API를 사용하고 있기 때문에 아래를 사용했습니다.

var jsonSettings = Formatters.JsonFormatter.SerializerSettings;
jsonSettings.DateFormatString = "yyyy-MM-ddTHH:mm:ss";

"Angular way"는 $filter 서비스를 사용하여 날짜 선택자에 의해 반환된 날짜를 포맷하는 것입니다.

예(HTML):

{{inpDate | date: 'dd-MM-yyyy'}}

예(JS):

$scope.processDate = function(dt) {
return $filter('date')(dt, 'dd-MM-yyyy');
}

여기 플런커

언급URL : https://stackoverflow.com/questions/19564017/how-to-send-angularstrap-datepicker-value-without-timezone

반응형