Changes in version 0.5.4 (2025-06-02) Coercion - Improved how as_messydates() handles text with dates in American format, e.g. October 10, 2010 (fixes #86) Changes in version 0.5.3 (2025-03-20) Components - Improved year() to be faster and work on durations - Improved precision() - precision() is now a S3 generic, dispatching to precision.mdate() - precision.mdate() now returns the inverse of the previous measure, meaning maximising precision makes more sense Changes in version 0.5.2 (2025-03-07) Package - Moved mreport() to {manydata} - Consolidated and renamed scripts internally Coerce to - Fixed pkgdown#2855 by fixing how as_messydate methods interpret infinite dates - Fixed time zone defaults in as.POSIXct.mdate() and as.POSIXlt.mdate() - Fixed set bug in validate_messydate() Coerce from - Renamed as.numeric() to as.double() to fix S3 dispatching - Separated extrema functions into min.mdate() and max.mdate() for summaries and vmin.mdate() and vmax.mdate() for vector coercion - Separated tendency functions into mean.mdate(), median.mdate(), and modal.mdate() for summaries and vmean.mdate(), vmedian.mdate(), and vmodal.mdate() for vector coercion - Vector coercion previously in random.mdate() now in vrandom.mdate() - Improved how coercion/resolution functions handle BCE dates Manipulation - Fixed how precision() calculates precision Changes in version 0.5.1 Package - Fixed redirected url in README - Fixed pkgdown help links Changes in version 0.5.0 Package - Dropped the vignettes as they were 'outdated' - Dropped a number of tests to provide rapid testing framework - Dropped {tibble} dependency by just using {dplyr} - Updated Github workflows - Updated testthat to version 3, tests now run in parallel - Updated pkgdown to bootstrap 5 - Updated DESCRIPTION with config packages Functions - Moved from {stringr} to {stringi} for speed - Added as.numeric.mdate() and as_messydate.numeric() for coercing between messydates and numbers (closes #85) - Added seq.mdate() for creating sequences from one or two messydates - This includes correct sequences for leap years and historical dates including before the common era - Added is_bce() for testing whether dates are from before the common era - Added stri_squish() helper for trimming white space everywhere - Improved c.mdate() so that it will strip class from an mdate object, as expected - Improved is_uncertain() and is_approximate() so that they also recognise % annotations - Improved min.mdate(), max.mdate(), and modal.mdate() to avoid using expand() and consequently run much faster - Improved min.mdate(), max.mdate(), modal.mdate(), mean.mdate(), median.mdate(), and random.mdate() by adding recursive argument for resolving vectors down to a scalar - Fixed bug in messyduration.mdate() where the minimum of an underspecified later date was used - Fixed bug in as_messydate() where zero padding for early dates was not added correctly Changes in version 0.4.1 (2024-04-19) Package - The package now depends on R versions bigger or equal to 4.0 since functions for subsetting and comparing 'mdate' objects rely on functions introduced in that version Functions - Closed #83 by fixing how logical comparisons works for negative and year only dates Changes in version 0.4.0 Functions - Closed #46 by adding the mdates_duration class that introduces methods to annotate a duration or period with representations of its uncertainty - Closed #72 by fixing issues with double unspecified components not being contracted correctly - Closed #73 by fixing bugs with the conversion of dates where month is spelled - Closed #74 and #82 by adding other logical comparison operators for 'mdate' objects (e.g. <, >, <=, >=) (thanks @WerthPADOH) - Closed #76 by adding proportional operators that calculate the proportion of messy dates meeting logical tests (e.g. %l% %le%, %g%, %ge%, %><%, %>=<%) - Closed #77 by adding basic vector methods for subsetting and data frames (thanks @WerthPADOH) - Added alias function mdate() for as_messydate() - Renamed set family of functions to work as operators (i.e. %intersect% and %union%) - Replaced is_element() by is_subset() for clarity and consistency - Closed #80 by updating make_messydates() function to also construct ranges of dates Changes in version 0.3.5 (2023-01-20) Functions - Updated how contract() function checks if 'mdate' object has been expanded Changes in version 0.3.4 Package - Updated 'battles' internal data - Corrected issues with zero padding for certain date ranges - Added 'US_party' and 'N_actors' additional variables for replication purposes Functions - Closed #68 by updating as_messydate() function - Fixed bugs with zero padding for ranges of dates - Fixed bugs with the re-ordering of months and day components for incorrectly specified dates - Closed #69 by updating contract() function to 'expand' dates before 'contracting' them - Updated expand() function to handle, and properly convert, date objects that are not 'mdate' Changes in version 0.3.3 (2022-12-20) Package - Moved cheatsheet.pdf to 'inst' folder instead of the 'man' folder Changes in version 0.3.2 Package - Closed #64 by updating failing tests to test for other aspects instead of the printing of negative dates across OS - Closed #65 by updating cheatsheet for new package changes Functions - Closed #62 by adding "resequence" as an argument to as_messydates() for explicit date format conversion, if necessary - Closed #63 by fixing issues with unnecessary white spaces added in date conversion Changes in version 0.3.1 (2022-07-21) Package - Updated README by removing unattractive package startup messages - Updated battles data by adding 'parties' variable Functions - Closed #54 by adding new mreport() function to properly report on data containing 'mdate' variables - Updated expand() function - Fixed bug with the expansion of approximate dates - Removed unnecessary function message Changes in version 0.3.0 (2022-06-02) Package - Closed #51 by changing object class name to mdate - Note that this is a breaking change - Closed #41 by creating {skimr} template for mdate class Functions - Updated coercion to messy dates - Closed #26 by adding "resequence" argument to as_messydate() allowing users to choose component order of ambiguous dates - Closed #45 by improving how as_messydate() re-orders 6 digit date components if necessary - Closed #48 by adding zero padding incomplete date ranges and sets of dates - Updated as_messydate() to also extract dates from text strings - Added is_precise() function that provides a logical test for precise dates - Updated messy dates expansion - Updated expand() to allow for the expansion of incomplete date ranges and sets of dates - Closed #49 by updating resolve functions to only expand dates if they are not precise Changes in version 0.2.1 (2022-02-23) Package - Added a vignette for working with the {messydates} package Functions - Closed #9 by adding arithmetic operations for working with messydt objects - Added S3 methods for "+" and "-" operators - Added add() and subtract() helper functions for arithmetic operations - Updated expand() function - Closed #31 by updating how approximate dates are expanded to account for leap years - Closed #34 by updating expand() to manage negative dates - Added expand_negative_dates() helper function for expanding ranges of negative dates - Updated functions that coerce from messydt objects to Date to manage negative dates - Added negative_dates() helper function to coerce negative messydt dates - Closed #39 by updating how resolve mean methods work for negative dates - Closed #40 by updating contract function to manage the contraction of negative dates - Added compact_negative_dates() helper function to compact negative date ranges - Added is.sequence() as a helper function to check if dates are a range - Updated resequence script to export interleave() function Changes in version 0.2.0 (2021-11-12) Package - Added PANARCHIC project details to README file - Added cheatsheet - Added a new CSS style to website and updated functions displayed - Addressed workflow actions issues - Updated pushrelease.yml workflow actions file to stop installing {messydates} from Github - Updated README file to stop installing {messydates} from Github - Fixed Codecov test coverage URL on README file for CRAN submission Functions - Expanded on messydates checks for class validity - Fixed bugs for make_messydate() - Added annotation functions and standardized annotation so that it is consistent with ISO2019E standards. - on_or_before() - on_or_after() - as_approximate() - as_uncertain() (includes discrimination between month uncertainty and day and month uncertainty) - Updated as_messydate() by adding zero padding for month, day or year - Updated resequence() to work consistently with messydate objects - Updated expand() function to expand imprecise, unspecified, approximate, uncertain, and negative dates according to approximate ranges and added tests - Updated precision() to return the lengths of expanded dates - Updated median() in resolve family of functions to work with changes to expand() - Added tests for functions - Added tests for expand() - Added tests for contract() - Added tests for precision() - Added tests for coerce_from_messydate() Changes in version 0.1.1 (2021-07-19) Package - Updated README with some more explanation about what the package does/offers - Fixed URL to the package website Changes in version 0.1.0 Package - Updated call to messydt class in DESCRIPTION file Functions - Updated documentation for as_messydate() functions - Updated documentation for expand() function - Updated documentation for resolve family of functions - Updated documentation for coerce from family of functions - Updated documentation for coerce to family of functions Changes in version 0.0.1 Package - Setup {messydates} package - Added DESCRIPTION file - Added R folder - Added LICENSE file - Added NAMESPACE file - Added NEWS file - Added README files - Added .github folder and files - Added tests folder and files - Setup pkgdown website - Added package logo Functions - Added a new messydt class which follows the latest ISO 8601 (2019) standards - Added validation checks for messydt class - Added print methods for messydt class - Added as_messydate() function to coerce from date objects to messydate - as_messydate() standardises date order, separators and ambiguity - Added date class coercion - Added POSIXct class coercion - Added POSIXlt class coercion - Added character class coercion - Added functions to coerce from messydate objects to other date classes - Added as.Date.messydt() for coercing to date class - Added as.POSIXct.messydt() for coercing to POSIXct class - Added as.POSIXlt.messydt() for coercing to POSIXlt class - Added expand() function for expanding ranged and uncertain dates - Added functions to resolve expanded dates - Added min.messydt() to get minimum value from expanded range - Added max.messydt() to get maximum value from expanded range - Added median.messydt() to get median value from expanded range - Added mean.messydt() to get mean value from expanded range - Added modal.messydt() to get mode value from expanded range - Added contract() function for contracting expanded dates - Added extract functions to get particular date components - Added year() to extract year from date - Added month() to extract month from date - Added day() to extract day from date - Added make_messydate() function to get messy dates from multiple columns - Added set functions for operations in sets of messy dates - Added md_intersect() to find intersection of sets of messy dates - Added md_union() to find union of sets of messy dates - Added md_multiset() to join two sets of messy dates - Added logical function for various logical tests for messy date objects - Added is_messydate() to test for messydt class - Added is_intersecting() to test if dates intersect - Added is_element() to test for multiple elements in dates - Added is_similar() to test for similarities in dates - Added tests for new functions - Added tests for messydt class and às_messydate() function - Added tests for coerce from messy dates functions - Added tests for coerce to messy dates functions - Added tests for contract() function - Added tests for expand() function - Added tests for extract functions - Added tests for make_messydate() function - Added tests for resolve functions - Added tests for set functions