Parsing ISO dates with Flex and ActionScript
The following example shows how you can parse an ISO format date (for more information, see http://www.w3.org/TR/NOTE-datetime) and convert it into a Date object in ActionScript using the String class’s replace() method and the static Date.parse() method.
Full code after the jump.
<?xml version="1.0" encoding="utf-8"?> <!-- http://blog.flexexamples.com/2008/02/02/parsing-iso-dates-with-flex-and-actionscript/ --> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" verticalAlign="middle" backgroundColor="white" creationComplete="init();"> <mx:Script> <![CDATA[ [Bindable] private var d:Date; private function init():void { var isoStr:String = "2008-01-25T06:14:23Z"; d = isoToDate(isoStr); formHeading.label = isoStr; } private function isoToDate(value:String):Date { var dateStr:String = value; dateStr = dateStr.replace(/\-/g, "/"); dateStr = dateStr.replace("T", " "); dateStr = dateStr.replace("Z", " GMT-0000"); return new Date(Date.parse(dateStr)); } ]]> </mx:Script> <mx:Form> <mx:FormHeading id="formHeading" /> <mx:FormItem label="toString():"> <mx:Label text="{d.toString()}" /> </mx:FormItem> <mx:FormItem label="toLocaleString():"> <mx:Label text="{d.toLocaleString()}" /> </mx:FormItem> <mx:FormItem label="toUTCString():"> <mx:Label text="{d.toUTCString()}" /> </mx:FormItem> </mx:Form> </mx:Application>
View source is enabled in the following example.
A big thanks to Jon for helping me with the bug in my time-zone conversion.
Peter deHaan
Peter deHaan currently works for Adobe on the Flex SDK QA team. While not working on Flex, Flash, and ColdFusion applications, Peter enjoys making up bios and writing in 3rd person. Peter's rarely updated blog can be found at blogs.adobe.com/pdehaan/, actionscriptexamples.com, airexamples.com, and coldfusionexamples.com.
-
Add Widgets (Content Sidebar)
This is your Content Sidebar. Edit this content that appears here in the widgets panel by adding or removing widgets in the Content Sidebar area.
14 Responses to Parsing ISO dates with Flex and ActionScript
-
Categories
- Accordion
- AccordionHeader
- ActionScript
- AddChild
- AdvancedDataGrid
- Alert
- alpha
- Animate
- AnimateProperties
- Application
- Application (Spark)
- ArrayCollection
- BarChart
- baseColor
- beta
- beta1
- beta2
- Bitmap
- Bitmap/BitmapData
- BitmapData
- BitmapFill
- BitmapFill (Spark)
- BitmapGraphic
- BitmapImage
- BitmapImage (Spark)
- BitmapImageResizeMode
- Border (Spark)
- BorderContainer (Spark)
- Box
- BuildInfo
- Button
- Button (Spark)
- ButtonBar
- ButtonBar (Spark)
- ByteArray
- Camera
- Charting
- CheckBox
- CheckBox (Spark)
- ClassFactory
- CollectionEvent
- Color
- ColorPicker
- ColorUtil
- ComboBox
- ComboBoxArrowSkin
- Compiler
- Component
- Component (Spark)
- Configuration
- Container
- ContextMenu
- ContextMenuEvent
- ContextMenuItem
- CSSCondition
- CSSSelector
- CSSStyleDeclaration
- CurrencyFormatter
- CursorManager
- Data Binding
- DataGrid
- DataGrid (Spark)
- DataGridColumn
- Date
- DateBase
- DateChooser
- DateField
- DateFormatter
- Debugging
- DefaultComplexItemRenderer
- DefaultTileListEffect
- DropDownList
- DropDownList (Spark)
- DropDownListButtonSkin
- DropDownListSkin
- DropShadowFilter
- E4X
- Effects
- Ellipse
- EmailValidator
- Embed
- Event
- Fade
- FileFilter
- FileReference
- fill
- Filters
- Flash
- Flash Integration
- FlashVars
- Flex 3 SDK
- Flex Builder
- Flex Builder 3
- Flex SDK
- Flex4
- FLVPlayback
- FocusManager
- FontLookup
- Fonts
- Form
- Form (Spark)
- FormHeading (Spark)
- FormItem
- FormItem (Spark)
- Forms
- FTETextField (Spark)
- FullScreen
- FullScreenEvent
- FxAnimateColor
- FxButtonBar
- FxCheckBox
- FXG
- FxHScrollBar
- FxHSlider
- FxList
- FxNumericStepper
- FxRadioButton
- FxRotate3D
- FxScroller
- FxTextArea
- FxTextInput
- FxToggleButton
- FxVScrollBar
- FxVSlider
- getStyleDeclaration()
- GradientEntry
- Graphic (Spark)
- HBox
- HDividedBox
- HGroup (Spark)
- HorizontalLayout
- HorizontalList
- HSBColor (Spark)
- HScrollBar (Spark)
- HSlider
- HSlider (Spark)
- HTML template
- ID3Info
- Image
- Image (Spark)
- ImageSnapshot
- itemRenderer
- JointStyle
- Label
- Label (Spark)
- Legend
- LegendItem
- LigatureLevel
- Line
- LinearGradientStroke
- LineScaleMode
- LinkBar
- LinkButton
- List
- List (Spark)
- Menu
- MenuBar
- Metadata
- MetadataEvent
- Model
- Mouse
- MouseCursor
- MouseEvent
- Move
- Namespace
- NavigatorContent (Spark)
- needsSWF
- NetConnection
- NetStream
- Nightly Builds
- NumberBaseRoundType
- NumberFormatter
- NumberValidator
- NumericCompare
- NumericStepper
- NumericStepper (Spark)
- ObjectProxy
- ObjectUtil
- paddingLeft
- paddingRight
- Panel
- Panel (Spark)
- Parallel
- Path
- PieChart
- PieSeries
- PieSeriesItem
- PopUpAnchor (Spark)
- PopUpButton
- PopUpManager
- ProgrammaticSkin
- ProgressBar
- PropertyChangeEvent
- QName
- RadialGradient
- RadioButton
- RadioButton (Spark)
- RadioButtonGroup
- RadioButtonGroup (Spark)
- Rect
- RegExp
- Regular Expressions
- Repeater
- RichEditableText
- RichText
- RichText (Spark)
- RichTextEditor
- Rotate
- Rotate3D (Spark)
- Scroller (Spark)
- Sequence
- setStyle()
- SimpleText
- SimpleText (Spark)
- skinClass
- Slider
- SliderEvent
- SolidColor
- SolidColorStroke
- Sort
- SortField
- Sound
- SoundEffect
- Spinner (Spark)
- SpriteVisualElement (Spark)
- StageDisplayState
- States
- StringUtil
- StringValidator
- StyleManager
- Styles
- SWFLoader
- SWFObject
- System
- SystemManager
- TabBar
- TabBar (Spark)
- TabNavigator
- TabStopFormat
- Text
- Text Layout Framework (TLF)
- TextArea
- TextArea (Spark)
- TextBox
- TextConverter
- TextEvent
- TextFlow
- TextFlowUtil
- TextFormat
- TextGraphic
- TextInput
- TextInput (Spark)
- TextLayoutFormat
- TextView
- Themes
- TileLayout
- TileList
- TileOrientation
- Timer
- TitleWindow
- TitleWindow (Spark)
- TLF
- ToggleButton (Spark)
- ToggleButtonBar
- ToolTip
- Transition
- Tree
- TruncationOptions
- UIComponent
- UIFTETextField
- Updater
- URLLoader
- URLRequest
- URLUtil
- URLVariables
- ValidationResultEvent
- Validator
- Validators
- VBox
- VDividedBox
- Vector
- VerticalLayout
- VerticalLayout (Spark)
- VGroup (Spark)
- Video
- VideoDisplay
- VideoElement
- VideoElement (Spark)
- VideoEvent
- VideoPlayer (Spark)
- VideoPlayerScrubBar
- ViewStack
- VScrollBar (Spark)
- VSlider
- VSlider (Spark)
- XML
- XMLList
- XMLListCollection
- ZipCodeValidator
- ZipCodeValidatorDomainType
- Zoom
-
Articles
- December 2010
- November 2010
- October 2010
- September 2010
- August 2010
- July 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
-
Meta


Thanks for the code – a real life saver!
The only thing your function doesn’t deal with is the “null” ISO date: 0001-01-01T00:00:00. I would have expected this function to return a null Date object if it were passed this String.
public static function parseIsoDate(dateStr:String):Date { dateStr = dateStr.replace(/-/g, "/"); dateStr = dateStr.replace("T", " "); dateStr = dateStr.replace("Z", " GMT-0000"); const i:Number = Date.parse(dateStr); if (i < 0) { return null; } else { return new Date(i); } }David,
Great tip, thanks!
Peter
David, Peter
From my experience, if you can’t guarantee the given parameter dateStr is a valid date you should check for NaN using isNaN(i).
Many thanks for the useful example!
Have fun
Robert
thank you, thank you..:-)
you saved me hours and hours
Thanks for the example! Big help.
Thanks for this code, it is much appreciated.
Thank you! Thank you! Thank you!
I’ll add the following for fellow Force.com developers who encounter difficulties converting from the SFDC (Salesforce.com) DateTime datatype to the Flex Date datatype.
SFDC stores ISO format with milliseconds (i.e. “2009-09-22T15:00:00.000Z”) which I had to strip out before the above code would work
Thank You very much. I got this isodate format from my C#( + Fluorine) webservice. I’ve been looking for the solution since yesterday.
Hi, I had the big problem, that DateUtil.parseW3CDTF() failed when parsing a lot of dates. Then I found your solution and it solved my problem. Not only that but it is also way faster!
But I have one improvement, that I would suggest: I have to work with GMT offsets, so I rewrote the parser like that:
dateString = dateString.replace(/(\d{4,4})\-(\d{2,2})\-(\d{2,2})/g, "$1/$2/$3");
dateString = dateString.replace("T", " ");
dateString = dateString.replace(/(\+|\-)(\d+):(\d+)/g, " GMT$1$2$3");
dateString = dateString.replace("Z", " GMT-0000");
Maybe it’s useful for anybody ;-)
-Dani
For those that want to handle milliseconds, I modified the code a bit to add them in later.
very helpful, thanks!
very helpful, thanks!
check this post for converting a date string into date object http://www.ntaka.co.za/how-convert-date-string-to-date-object-using-flex
Seems that the mx.formatters.DateFormatter class can parse an ISO date if you trim off the last 6 characters (i.e. the time zone offset). Here’s a real simple utility class:
<code>
package fleetcycle.cp.util
{
import mx.formatters.DateFormatter;
public final class DateFormatterUtil
{
public static function parseISOString(str:String):Date
{
if (str != null && str.length > 0)
{
str = str.substring(0, str.length – 6);
return DateFormatter.parseDateString(str)
} else
{
return null;
}
}
}
}
<code>
And here is a FlexUnit test method that verifies it works:
<code>
[Test]
public function test_parse_standardutil():void
{
var dt:Date = DateFormatterUtil.parseISOString(“2010-03-20T06:30:23-05:00″);
assertEquals(2010, dt.fullYear);
assertEquals(2, dt.month);
assertEquals(20, dt.date);
assertEquals(6, dt.hours);
assertEquals(30, dt.minutes);
assertEquals(23, dt.seconds);
}
<code>
Hi,
i have a problem face from last day.
The problem is that i want to run a countdown Timer. The timer is start from two dates
1. current date (as New Date()).
2. the immediate Monday (as new Date(“Mon Jan 17 2011″))
The problem is with 2nd date.
How i dynamically find the next Monday date ?.
Thanks and welcome for Help.