जाँच अगर एक महीने से पारित कर दिया गया में एक तारीख स्ट्रिंग स्वरूप(जे एस)

0

सवाल

में जावास्क्रिप्ट आवेदन मैं कर रहा हूँ प्राप्त करने में एक तारीख के एक स्ट्रिंग के प्रारूप में, इस तरह: 19/10/2021 (dd/mm/yyyy). मैं चाहता हूँ अगर जाँच करने के लिए एक माह बीत चुका है, के बाद कहा तारीख और वापसी के लिए एक सच्चे यदि ऐसा है तो. मैं कोशिश कर रहा हूँ की तरह कुछ के लिए, निम्न कोड है, लेकिन यह काम नहीं कर रहा है.

मैं कर रहा हूँ कुछ अजीब मूल्यों की कोशिश जब मैं यह डिबगिंग के साथ सांत्वना.लॉग और इस तरह, मैं एक नौसिखिया हूँ जे एस में तो मुझे नहीं पता है, जहां मैं कर रहा हूँ सामान गलत है ।

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, आप पारित करना चाहिए में तिथि() y,m,d और नहीं d,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 है एक स्ट्रिंग में प्रारूप dd/mm/yyyy है, तो userDate.split('/').reverse() वापस आ जाएगी सरणी की तरह [yyyy,mm,dd]. और यह है कि क्या तिथि() constructor हो रही है के रूप में मानकों ।
Mordy Stern

आप गुजर रहे हैं एक ही मूल्य है, एक सरणी. देखें ECMA-262 और मेरी टिप्पणी पर इस सवाल का जवाब.
RobG
0

क्योंकि "की परिभाषा में उम्र वर्ष" है... लचीला, सबसे आसान तरीका है का उपयोग करने के लिए एक छोटे से गणित के रूप में आप यह गणना में अपने सिर, और नहीं शामिल Date वर्ग.

के लिए [एक] मानव की व्याख्या "की उम्र में" महीने, नियम है

  • गणना के बीच अंतर दो तिथियों में महीने, के रूप में अगर दिन के महीने में किया गया था 1 महीने के लिए दोनों तिथियाँ

  • घटाना 1 बाहर करने के लिए अंतिम माह

  • तो, अगर दिन के महीने के अंतिम दिन की अवधि पर है या दिन के बाद के महीने के पहले दिन से अवधि, [संभवतः आंशिक] अंतिम महीने में पूरा हो गया है: जोड़ना 1 को पुनर्स्थापित करने के लिए गिनती

इस मरहम में एक मक्खी है, के बाद से महीने होते हैं अलग अलग संख्या के दिनों के साथ निपटने के मामलों में जहां 2 महीने अलग-अलग दिनों की संख्या.

अगर, हालांकि, अंत में महीने की तुलना में कम है शुरू, एक महीने में, आप में प्राप्त कर सकते हैं, जहां एक की स्थिति की सीमा शर्त कर सकते हैं कभी नहीं मिले हो (उदाहरण के लिए, शुरू करने की तारीख है फ़रवरी 28 और अंत की तारीख है 31 मार्च. कि ठीक करने के लिए, आप की जरूरत है पर देखो करने के लिए "महीने के अंत" के रूप में किया जा रहा है एक खिड़की से लेकर अंतिम दिन के शुरू में महीने के अंतिम दिन के माध्यम से अंत महीने समावेशी.

है कि सुराग के लिए इस कोड. मैं कर रहा हूँ का उपयोग कर एक संरचना की तरह निम्नलिखित का प्रतिनिधित्व करने के लिए एक तिथि:

{
  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

"यह केवल काम करता है के साथ 'महीना/दिन/वर्ष स्वरूप" सही नहीं है, में निर्मित पारसर्स जाएगा पार्स (सही ढंग से या अन्यथा) प्रारूपों की एक भीड़ के साथ अक्सर भिन्न का परिणाम है । सामान्य सलाह है "का उपयोग नहीं करते में निर्मित पार्सर", मैन्युअल रूप से पार्स डी/एम/वाई मुश्किल नहीं है ।
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') जो वापस आ जाएगी नेन में कम से कम कुछ है, अगर नहीं सभी, कार्यान्वयन है. देखें क्यों करता है तिथि.पार्स गलत परिणाम दे? और MDN: तारीख.पार्स.
RobG

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में