2017-04-30 2 views
0

나는 훈련을 위해 평균 스택이있는 경매 사이트를 만들고 있습니다. 나는 물건을 이해하는 데 거의 문제가 없다. DB의 모든 제품에 대해 "2017-04-30T22 : 10 : 52.360Z"형식으로 마감일을 저장했으며 프런트 엔드에는 오늘 날짜와 종료 날짜의 차이 ("30 일 이 기능) "나머지 :. 분명히 경매 마감일 평균 스택

  $scope.days =function (date) { 
      var today = new Date(); 
      var dd = today.getDate(); 
      var mm = today.getMonth() + 1; //January is 0! 
      var yyyy = today.getFullYear(); 
      if (dd < 10) { 
      dd = '0' + dd 
      } 
      if (mm < 10) { 
      mm = '0' + mm 
       } 
      today = yyyy + '/' + mm + '/' + dd; 
      $scope.today = today; 
      var date2 = new Date(today); 
      var date1 = new Date(date); 
      var timeDiff =(date1.getTime() - date2.getTime()); 
      $scope.dayDifference =((timeDiff/(1000 * 3600 * 24))-1); 
      return $scope.dayDifference; 
       } 
      }); 

내가 HTML 파일에서 다른 날짜를 통과 내 질문은 : 나는 같은 것을 할 경우, 경매는 오늘 날짜의 원인, 세계에서 다른 시간에 종료 예를 들어, 이탈리아와 미국에서는 다르다. 아니면 내가 잘못한 것인가? 나는이 문제를 해결하기 위해 프런트 엔드에서이 함수를 수정하는 방법이 존재하는지 궁금해했다. 뭔가 같은 : 내가 미국에서 사이트에 가입하면 (서버의) 내 시간대로 그 날짜를 변환

+0

* date * 형식은 무엇입니까? 시간대가있는 ISO 8601 문자열 인 경우 (예 : "2017-04-30T22 : 10 : 52.360Z"그러면 IE 8 이후 (그리고 그 이전) 모든 브라우저에서 내장 Date 생성자를 사용하여 "로컬"날짜로 변환 할 수 있습니다. 다른 형식이라면 조금 더 많은 작업이 필요하지만 많이 필요하지는 않습니다. – RobG

+0

오늘 날짜를 문자열로 변경 했으므로'var date2 = new Date (today)'는 잘못된 Date를 반환 할 수 있습니다. – RobG

+0

안녕하세요, @ RobG. 당신이 말한 것처럼 날짜는 ISO 형식입니다. – mpeg90

답변

1

날짜 문자열이 "2017-04-30T22 : 10 : 52.360Z"와 같이 ISO 8601 확장 형식 인 경우 Internet Explorer 8 이상의 브라우저는 내장 된 파서로 구문 분석 할 수 있습니다. 또한 기본적으로 Date 메서드는 호스트 표준 시간대 오프셋을 조정하여 남은 일 수를 가져와 ISO 문자열을 구문 분석하고 사용자의 현재 날짜 (밀리 초)와의 차이를 얻은 다음 일 (또는 어울리는 모든 단위)으로 변환합니다.

날짜 문자열이 정확하게 ISO 8601 형식이 아닌 경우

/* Return the difference in days between supplied string date 
 
** and host current date 
 
** @param {string} s - Date string in ISO 8601 format, e.g. 2017-04-05T23:00:00Z 
 
** @returns {number/string} if s is a valid date string, returns days between current host date and supplied date 
 
**       if s is an invalid date string, returns "Invalid date string" 
 
*/ 
 
function daysRemaining(isoString) { 
 
    var d = new Date(isoString); 
 
    if (isNaN(d)) return 'Invalid date string'; 
 
    return (d - new Date())/8.64e7; 
 
} 
 

 
var s = '2017-05-30T22:10:52.360Z'; 
 

 
console.log('Days remaining: ' + daysRemaining(s).toFixed(2));

, 일부 브라우저는 많은 다른 사람을하지 구문 분석 할 수 있습니다. 또한 위의 ISO 형식이 아닌 경우 일부는 UTC로, 일부는 로컬로 처리 할 수 ​​있으므로주의하십시오.

전체 일로 반올림하거나 일, 시간 및 분으로 변환 할 수 있습니다.

IE 8 이전 버전은 ISO 형식 날짜 문자열을 구문 분석하지 않으며 다른 브라우저의 이전 버전도 해석하지 않습니다.