를 확인하는 경우에는 날짜에서 문자열 형식으로(JS)

0

질문

내 JavaScript 응용 프로그램을 내가 받은 날짜에서 형식 문자열은 다음과 같습니다. 19/10/2021 (dd/mm/yyyy). 확인하고 싶다면 한 달이 지났다고 말했 날짜 반환하는 경우 true 니다. 나가려고 다음과 같은 코드,하지만 그것은 작동하지 않습니다.

나는 몇 가지 이상한 값을 나는 디버깅을 시도 그것으로 console.로그와 같은,나는 초보자에서 js 그래서 제가 어디 있는지 몰라 내가 하는 물건은 잘못입니다.

var q = new Date();
var d = q.getDate();
var m = q.getMonth() + 1; //+1 because january is 0 and etc
var y = q.getFullYear();

var today = new Date(d, m, y);

mydate = userDate; // this is the string the app is receiving

if (today - mydate > 30) {
    return true;
} else {
    return false;
}

미리 감사드립니다.

date javascript
2021-11-23 20:24:55
5
0

이것을 보십시오:

    var q = new Date();
    var d = q.getDate();
    var m = q.getMonth(); 
    var y = q.getFullYear();
    var today = new Date(y,m,d);
    var mydate = new Date("2021-11-22"); 
    if(((today - mydate)/ (1000 * 60 * 60 * 24)) > 30)
    {
        return true;
    }
    else
    {
      return false;
    }
2021-11-23 20:53:55
0

첫째,설정할 때 q 하기 new Date() 그것은 오늘입니다. 할 필요가 없이 그것에서 얻은 하루,한 달,그리고 올해 다시 설정합니다. 그래서 오늘을 수행할 수 있습 var today = new Date().

Secound,당신이 통과해야로 Date() y,m,dd,m,y.

셋째,당신이 빼기에서 날짜,또 다른 계산에 milisecounds,지 않은 일입니다.

이동:

var userDate = '19/10/2021';
var myDate = new Date(userDate.split('/').reverse());
var today = new Date();

var thirtyDays = 1000*60*60*24*30;

return today - myDate > thirtyDays;
2021-11-23 22:09:04

new Date(userDate.split('/').reverse()) 이 거의 확실하게 반환 잘못된 날짜입니다.
RobG

@RobG 경우 userDate 에서 문자열이 format dd/mm/yyyy,다음 userDate.split('/').reverse() 반환됩니다 배열은 다음과 같이 [yyyy,mm,dd]. 이것은 무엇 Date()생성자를 얻으로 매개 변수입니다.
Mordy Stern

당신이 통과하는 단일 값 배열입니다. 보 ECMA-262 및 내 댓글에 이 대답.
RobG
0

기 때문에 정의"시대에 개월은"...가동 가능한 가장 쉬운 방법을 사용하는 것이 작은 연산으로 계산은 그것의 머리에서,그리고련 Date 클래스입니다.

를[a]인간의 해석"시대에 개월 동안",규칙이

  • 계산 둘 사이의 차이점은 날짜에 개월 럼 하루-of-the-달의 1 일에 달한 날짜

  • 빼기 1 을 제외할 최종 한 달

  • 그런 다음 경우,day-of-the-달의 마지막 날의 기간에 또는 후에 하루의-달의 첫째 날의 기간,[잠재적으로 부]최종 개월이 완료:추가 1 을 복원 계산

하나에서 비행 연고,이후 개월 동안 다른 숫자를 포함한 일을 다루는 경우가 2 개월 만에 다수의 일입니다.

는 경우,그러나 결국 달보다 짧은 시작 월,당신이 얻을 수 있는 상황으로 경계 조건이 될 수 없을 만났(예를 들어 시작 날짜 월 28 일과 종료일은 월 31 일. 그 문제를 해결하기 위해,당신은에서 볼 필요가"end"달의 것으로는 창에 이르기까지의 마지막 날에 시작하는 달의 마지막 날을 통해 최종달을 포함한다.

에 이르게 하는 코드입니다. 나는 구조를 사용하여 다음과 같이를 나타내는 날짜:

{
  year:  2021 , // 4-digit year
  month:   11 , // month of year (1-12 mapping to January-December)
  day:     23   // day of month (1-[28-31] depending on year/month
}

을 보장하는 데이터에서는 구조체를 나타내는 유효한 날짜은 왼쪽으로는 운동에 대한 독자입니다.

코드가 복잡하지 않습니다:

/**
 * 
 * @param {object} bgn       - start date of period
 * @param {number} bgn.year  - 4-digit year
 * @param {number} bgn.month - month of year [1-12]
 * @param {number} bgn.day   - day of month [1-31]
 * 
 * @param {object} end       - end date of period
 * @param {number} end.year  - 4-digit year
 * @param {number} end.month - month of year [1-12]
 * @param {number} end.day   - day of month [1-31]
 * 
*/
function diffInMonths( bgn , end ) {
  const between = ( x , min , max ) => x >= min && x <= max;

  // We'll need to add back the final month based on the following:
  // - end.day >=  bgn.day -- we've passed the month boundary, or
  // - end.day is within the end-of-month window
  //   (when the end month is shorter than the start month)
  const needAdjustment = end.day >= bgn.day
    || between( end.day, daysInMonth(bgn), daysInMonth(end) );
  const finalMonthAdjustment = needsAdjustment ? 1 : 0;

  const deltaM = 12 * ( end.year - bgn.year )
    + ( end.month - bgn.month )
    - 1                    // remove the final month from the equation
    + finalMonthAdjustment // add in the precomputed final month adjustment
    ;

  return deltaM;
}

/**
 * 
 * @param {object} dt       - date
 * @param {number} dt.year  - 4-digit year
 * @param {number} dt.month - month of year [1-12]
 * @param {number} dt.day   - day of month [1-31]
 *
 */
function daysInMonth(dt) {
  const leapYear = ( dt.year % 4 === 0 && dt.year % 100 !== 0 ) || dt.year % 400 === 0;
  const monthDays = leapYear ? daysPerMonthLeap : daysPerMonth;
  const days = monthDays[dt.month];
  return days;
}
//                                    jan feb mar apr may jun jul aug sep oct nov dec
//                         ---------- --- --- --- --- --- --- --- --- --- --- --- ---
const daysPerMonth     = [ undefined, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, ];
const daysPerMonthLeap = [ undefined, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, ];
2021-11-23 20:49:22
-1

문제는 당신이 빼는 문자열에서 날짜입니다. 당신이 필요 mydate 동 형식으로 오늘입니다.

mydate = new Date(userDate)

(참고:이 작품으로'월/일/년'형식

2021-11-24 04:30:59

"이 작품으로'월/일/년'형식"은 정확하지 않은,내장 된 파서 분석됩니다(제대로 그렇지 않으면)다수의 형식,종종 서로 다른 결과입니다. 일반적인 조언은"사용하지 않 내장 파서"수동으로 구문 분석 d/m/y 는 것은 어렵지 않습니다.
RobG
-1

귀하의 날짜는 이 형식으로(19/10/2021)할 수 있는 첫 번째 추출물니다.

const thOneMonth = 1000*60*60*24*31 //31 days in milliseconds
let formated = '19/10/2021'.split('/')
let date = Date.parse(formated[2], formated[1]-1, formated[0])
let date2 = 1634591678400 //date + 2678400000 a month later. This is in UNIX format.
if(date + thOneMonth == date2 ){//31 days 
  //A month have passed  
  console.log(date + thOneMonth )
}

당신이 알고 싶다면 그것은 예를 들어,제 12 월과 다음 날은 월 12 일,당신은 그것을 고려해야 한다 월 30 일이다. 을 확인해야에 기초 31/30/29/28 일 개월입니다.


const thMonth = 1000*60*60*24*30 //30 days in milliseconds
let formated = '19/10/2021'.split('/')
let date = new Date(formated[2], formated[1]-1, formated[0])// make months start from 0
let date2 = 1634591678400 //date + 2678400000 a month later
if([5,7,10,12].includes(date.getMonth()+1) && Date.parse(date) + thMonth == date2 ){ // 30 days months 1000*60*60*24*30 //it won't enter here
  //A month have passed  
  console.log(date + thMonth)
}

2021-11-23 20:59:52

Date.parse('19/10/2021'.split('/').reverse()) 는 결함이 심각하게,그 효과적으로 Date.parse('2021,10,19') 을 반환 할머니 에서 적어도 몇 가지가 없는 경우,모든 구현입니다. 보 왜 날짜입니다.분석이 잘못된 결과? 반:Date.분석.
RobG

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................