2016-11-18 1 views
0

다른 날짜 범위를 가져오고 yyyymmdd를 반환하도록 서식을 지정하는 자바 스크립트가 약간 있습니다. 내가 필요한 최종 결과를 얻지 만, 2 가지 변수를 갖는 것에 대한 어떤 것이 나를 괴롭 히고 내가 이것을 최선의 방법으로 생각하지 않게 만든다. 새 날짜를 전달하고 추가 제거를하는 방법이 있다면 한 줄에 모든 것이 궁금합니다.날짜 형식화 vars 및 함수 결합 (jquery/Javascript)

function toJSONLocalMonth (firstDay, lastDay) {//set default date range to from beggining of this month 
    var local = new Date(firstDay); 
    local.setMinutes(firstDay.getMinutes() - firstDay.getTimezoneOffset()); 
    return local.toJSON().slice(0, 10); 

    var local = new Date(lastDay); 
    local.setMinutes(lastDay.getMinutes() - lastDay.getTimezoneOffset()); 
    return local.toJSON().slice(0, 10); 
} 

그리고이 결과를 필요할 때마다 나는이 작업을 수행 :

내 기능은 더 좋은 방법이 결과를 거기에 도착하는 경우) 오늘과 어제의 예)

var dateToday = new Date(); 
dateTodayFormat = toJSONLocalMonth(dateToday).replace(/-/g, "");//format date yyyymmdd 
dateYesterday = dateToday.setDate(dateToday.getDate() - 1); 
dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

을, 또는 최소한 dateYesterdaydateYesterdayFormat을 하나의 행에 결합하여 yyymmdd를 얻으십시오.

는 (필자는 유지할 필요 - 함수 결과에서, 그래서 거기를 필터링 할 수 없습니다.)

감사합니다!

답변

1

귀하의 질문에 명확하지 않습니다.

toJSONLocalMonth은 하나 개의 값, 첫 반환 문에서 하나를 반환합니다. 두 번째는 결코 도달되지 않습니다.

dateToday.setDate(...)의 반환 값은 날짜가 아니며 시간 값 (숫자)이므로 문자열 메서드를 연결할 수 없습니다. 그것은 즉

dateYesterday = dateToday.setDate(dateToday.getDate() - 1); 
dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

이 될 수 있으므로 dateYesterday이 중복 날짜 자체를 수정 :

dateToday.setDate(dateToday.getDate() - 1); 
var dateYesterdayFormat = toJSONLocalMonth(dateToday).replace(/-/g, ""); 

toJSONLocalMonth은 YYYYMMDD로 포맷 된 날짜 문자열을 받고있는 것으로 보인다. 로컬 시간대가 아닌 UTC/GMT를 사용하기 때문에 기본 제공 ISO 메서드는 사용하지 않는 것이 좋습니다.

var dateToday = new Date(); 
var dateTodayFormat = fecha.format(dateToday, 'YYYYMMDD') 
dateToday.setDate(dateToday.getDate() - 1); 
var dateYesterdayFormat = fecha.format(dateToday, 'YYYYMMDD'); 

마지막 두 :

/* Return an ISO 8601 formatted date string 
 
** @param {Date} d - date to create string for 
 
** @returns {string} string formatted as ISO 8601 without timezone 
 
*/ 
 
function toISOStringLocal(d) { 
 
    function z(n){return (n<10?'0':'') + n} 
 
    return d.getFullYear() + '-' + z(d.getMonth()+1) + '-' + 
 
     z(d.getDate()) + 'T' + z(d.getHours()) + ':' + 
 
     z(d.getMinutes()) + ':' + z(d.getSeconds()) 
 
      
 
} 
 

 
console.log(toISOStringLocal(new Date));

당신은 또한 당신이 할 거라고 fecha.js 같은 작은 형식 라이브러리를 고려해 볼 수 있습니다 : 다음 함수는 더 분명하게 있다는 않습니다 행은 다음을 사용하여 하나가 될 수 있습니다.

var dateYesterdayFormat = fecha.format(new Date(dateToday.setDate(dateToday.getDate() - 1)), 'YYYYMMDD'); 

하지만 추천하지 않습니다.

또한 참조 : Where can I find documentation on formatting a date in JavaScript?

+0

미안 내 질문은 매우 명확하지,하지만이 기능을 최적화하고 대신 "마법"에 :) 덕분에 의존 어떻게 작동하는지 이해하는 나에게 꽤 도움이 있다면! –