Introduction
This example shows how to use the date.parse.lua fuzzy date/time parser module to translate a wide variety of date/time formats.
The date.parse.parse()
function is pretty smart, but it can’t predict everything, to address this we allow you to create custom date formats.
If you have any questions please contact us at support@interfaceware.com.
Using the Code [top]
- Import the Parse any date time value channel from the Builtin: Iguana Date/Time repository
- Experiment with the code to find out how it works
- Then add the module to your Translator project
- Copy the require statement from the channel and add it at the top of your script
Note: This module uses require to return a table and also modifies the global namespace
- Adapt the code to your own requirements
- You can also use
date.parse.parse()
to parse dates - Interactive scripting help is included for this module
This is the github code for the main module:
Using other date.parse functions:
Here are some code snippets that demonstrate the other functions in this module.
The code should work immediately if you paste it into the main module – remember to do a source code commit first, so you undo the change).
Here are the three node methods :D()
, :T()
, and :TS()
:
dateparse = require 'date.parse' -- date.parse automatically translates a wide variety of date/time formats -- http://help.interfaceware.com/datetime-conversion-using-the-fuzzy-datetime-parser.html function main(Data) local Msg = hl7.parse{data=Data, vmd='demo.vmd'} local T = db.tables{vmd='demo.vmd', name='ADT'} local Dob = Msg.PID[7][1] trace(Dob) --> node containing '19830711183045' -- date compatible with database table node tree trace(Dob:D()) --> '1983-07-11 00:00:00' -- datetime compatible with database table node tree trace(Dob:T()) --> '1983-07-11 18:30:45' -- HL7 timestamp - not compatible with db table trace(Dob:TS()) --> '19830711183045' end
And here is some code using date.parse.parse()
:
dateparse = require 'date.parse' -- date.parse automatically translates a wide variety of date/time formats -- http://help.interfaceware.com/datetime-conversion-using-the-fuzzy-datetime-parser.html function main(Data) local Msg = hl7.parse{data=Data, vmd='demo.vmd'} local T = db.tables{vmd='demo.vmd', name='ADT'} local Dob = Msg.PID[7][1] trace(Dob) --> node containing '19830711183045' -- returns date as Unix Epoch time value and as a table local t, d = dateparse.parse(Dob:nodeValue()) trace(t, d) -- convert t (unix epoch time) to a string like :D() os.date('%Y-%m-%d 00:00:00',t) --> '1983-07-11 00:00:00' -- produces the same result Dob:D() --> '1983-07-11 00:00:00' -- using a custom date format t, d = dateparse.parse("2PM March 5th '77", "H[:MM]tt mmmm dw [']yy[yy]") tostring(t):T() --> '1977-03-05 14:00:00' tostring(t):D() --> '1977-03-05 00:00:00' tostring(t):TS() --> '19770305140000' end
How it works [top]
The date.parse.parse()
function recognizes the supplied format, and returns two values: first a unix epoch time value, and second a table with the date/time components. The time value can be compared with the Lua routine os.difftime()
or formatted as text with os.date()
.
The component table has various fields usable with Lua routines (i.e., year, month, day, hour, min, sec etc), as well as fields for partial seconds (sec_fraction) and time zones (tz and tz_offset).
We also supply three node functions for your convenience, :D()
, :T()
and :TS()
, to return dates in common formats. All of these functions date.parse.parse()
to recognize the dates and os.date()
to format them.
If you have other formats that you use a lot it is easy to create similar functions:
More information [top]
- Source code for the main module on github
- Source code for the date.parse.lua module on github
- Date/time conversion: Using the fuzzy date/time parser