Link | valid_date |
Author | Jolle Carlestam |
Category | Date |
Version | 9.x |
License | Public Domain |
Posted | 13 Oct 2014 |
Updated | 13 Oct 2014 |
More by this author... |
Replacement of Lasso 9 valid_date that adds an optional param -strict. If set to true it will fail on dates that doesn't exist in the real world. Like 2010-02-31.
When used with strict assumes that date inputs are either in ISO or US date format.
To use, place the file in the LassoStartup folder and restart Lasso 9.
NOTE: This method has a more modern version as a Gist.
https://gist.github.com/jolle-c/cef289d6ac3db1f9f6c0
Please use the Gist version instead
valid_date('2010-02-28') //' true' valid_date(date('2010-02-28'), -format = '%Q') // -> true valid_date('02/14/2010') // -> true valid_date('02/31/2010', -format = '%D') // -> true (should be false) valid_date('02/14/2010', -format = '%D') // -> true valid_date('2010-13-28') // -> true (should be false) valid_date('6000-12-28') // -> true valid_date('02/31/2010', -format = '%D', -strict) // -> false valid_date('2010-02-28', -strict) // -> true valid_date('02/14/2010', -format = '%D', -strict) // -> true valid_date('02/37/2010', -format = '%D', -strict) // -> false valid_date('2010-13-28', -strict) // -> false valid_date('6000-12-28', -strict) // -> true valid_date('02/31/2010', -format = '%D', -strict) // -> false (would be true without -strict) valid_date('2010-13-28', -strict) // -> false (would be true without -strict)
Click the "Download" button below to retrieve a copy of this tag, including the complete documentation and sample usage shown on this page. Place the downloaded ".inc" file in your LassoStartup folder, restart Lasso, and you can begin using this tag immediately.
month Deals with a bug in the present date type that doesn't return correct values for date -> month(-days) Written by Jolle Carlestam 2010-11-02 **/ define date -> month( -long::boolean = false, -short::boolean = false, -days::boolean = false ) => { #long ? return .format( '%B' ) #short ? return .format( '%b' ) if(#days) local(tempdate = date(.format('%Q'))) #tempdate -> day = 1 #tempdate -> add(-month = 1) #tempdate -> subtract(-day = 1) return #tempdate -> day /if return ..get(ucal_month)+1 } /**! define valid_date Replacement of valid_date that adds an optional param -strict. When set to true it will fail on dates that doesn't exist in the real world. Like 2010-02-31. When used with strict assumes that date inputs are either as ISO or US date format. Written by Jolle Carlestam 2010-11-02 **/ define valid_date(date, -format::string = '', -strict::boolean = false) => { // Empty input #date == null ? return(false) string(#date)->trim & == '' ? return(false) local(_format = #format -> ascopy) // Parse date local(parse) = (#format != '' ? date(#date, -format=#format) | date(#date)) // Invalid dates (#parse->type == 'null') ? return(false) (string(#parse)->size == 0) ? return(false) if(#strict) // strict will check that a date actually exist in the real world // find out input format, we can't convert input to a date type since that will change the input values if needed and we need to avoid that local(date_array = (string(#date) -> split(' ')) -> first) // get rid of the time part select(true) case(#_format == '%D') // US date format #date_array = #date_array -> split('/') (#date_array -> size != 3 ? return false) local(day = #date_array -> second) local(month = #date_array -> first) local(year = #date_array -> last) case(#_format == '%Q' || #_format == '') // assume ISO format since that is standard in Lasso 9 #date_array = #date_array -> split('-') (#date_array -> size != 3 ? return false) local(day = #date_array -> last) local(month = #date_array -> second) local(year = #date_array -> first) case return false /select (integer(#year) < date -> min(-year) || integer(#year) > date -> max(-year) ? return false) (integer(#month) < 1 || integer(#month) > 12 ? return false) (integer(#day) < 1 || date(#year + '-' + #month + '-01') -> month(-days) < integer(#day) ? return false) else(#format != ''); // Strict check of format against original date (allowing for leading zeroes or spaces) !#date -> isa('date') ? #date = (#format != '' ? date(#date, -format=#format) | date(#date)) string(#date) == #parse->format(regexp(-find='%-?_?', -replace='%')->replaceall(#format)) ? return(true); string(#date) == #parse->format(regexp(-find='%-?_?', -replace='%_')->replaceall(#format)) ? return(true); string(#date) == #parse->format(regexp(-find='%-?_?', -replace='%-')->replaceall(#format)) ? return(true); return(false); /if; return(true); } ?>
No comments
©LassoSoft Inc 2015 | Web Development by Treefrog Inc | Privacy | Legal terms and Shipping | Contact LassoSoft