Search code examples
regexdatesearchextjsextjs3

RegExp for dates Extjs 3.4


I have problem to make regExp for search panel

&& (item.get('prodAddDate') >= dateStartValue.format("Y-m-d"))
&& (item.get('prodAddDate') <= dateEndValue.format("Y-m-d"));

I'm not sure if this is task for refExp but don't have any other idea

Problem is that when I'm don't fill field with date I can't filtr data with other conditions

I was trying something like this but don't working

    && ((item.get('prodAddDate') >= dateStartValue.format("Y-m-d")) || (new RegExp(dateStartValue)).test(item.get('prodAddDate'))) &&
 ((item.get('prodAddDate') <= dateEndValue.format("Y-m-d")) || (new RegExp(dateEndValue)).test(item.get('prodAddDate')));

Solution

  • Not entirely sure what you're trying to do, but here are some pieces of information that I hope can help you to solve your problem.

    Comparison operators priority

    The && operator has priority over ||, which means that:

    A || B && C || D
    

    Is equivalent to:

    A || (B && C) || D
    

    Not to:

    (A || B) && (C || D)
    

    Date comparison

    You can compare Date objects directly:

    // example data
    var d1 = new Date('2012-12-12'),
        d2 = new Date('2012-12-12'),
        d3 = new Date('2013-01-01');
    

    And get the result you expect with <, >, <=, and >=:

    // logical results
    d1 < d3 // true
    d1 < d2 // false
    d2 > d3 // false
    d1 <= d2 // true
    d1 => d2 // true
    

    But not with equality comparison ==:

    d1 == d2 // false
    // yet...
    d1 <= d2 && d1 => d2 // true
    

    Conclusion: to test if one date is before or after another one, direct comparison is OK. But, in order to test if two dates are identical, use string comparisons:

    // is this the same day?
    d1.format('Y-m-d') === d2.format('Y-m-d') // true
    
    // is this the same day and hour?
    d1.format('Y-m-d H:i:s') === d2.format('Y-m-d H:i:s') // true
    

    Ext.isEmpty()

    Ext.isEmpty returns true for: null, undefined and empty strings '' only.

    Ext.isEmpty(null) // true
    Ext.isEmpty(undefined) // true
    Ext.isEmpty('') // true
    
    Ext.isEmpty(' ') // false
    Ext.isEmpty(false) // false
    // etc.
    

    That may be useful to address your empty field case:

    ...
    && (Ext.isEmpty(item.get('prodAddDate') || item.get('prodAddDate') >= dateStartValue)
    && (Ext.isEmpty(item.get('prodAddDate') || item.get('prodAddDate') <= dateEndValue)
    

    Finally

    What's this obsession about regex? They're useful for complex string testing/extracting, but that's all. You should probably forget about them for a while, dude ;p