You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jm...@apache.org on 2013/04/19 05:40:32 UTC

git commit: [flex-sdk] - FLEX-16909 Flex-26073 FLEX-33504 Made date to string and string to date conversion more flexible

Updated Branches:
  refs/heads/develop cdeee051a -> 4cbd55087


FLEX-16909 Flex-26073 FLEX-33504 Made date to string and string to date conversion more flexible


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/4cbd5508
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/4cbd5508
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/4cbd5508

Branch: refs/heads/develop
Commit: 4cbd550879e6d8af66ab0640e7c0c6bf77c16c20
Parents: cdeee05
Author: Justin Mclean <jm...@apache.org>
Authored: Fri Apr 19 13:40:11 2013 +1000
Committer: Justin Mclean <jm...@apache.org>
Committed: Fri Apr 19 13:40:11 2013 +1000

----------------------------------------------------------------------
 .../projects/mx/src/mx/controls/DateField.as       |  231 +++++++++------
 1 files changed, 140 insertions(+), 91 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/4cbd5508/frameworks/projects/mx/src/mx/controls/DateField.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mx/src/mx/controls/DateField.as b/frameworks/projects/mx/src/mx/controls/DateField.as
index 3cb7a72..5950f5c 100644
--- a/frameworks/projects/mx/src/mx/controls/DateField.as
+++ b/frameworks/projects/mx/src/mx/controls/DateField.as
@@ -432,7 +432,8 @@ public class DateField extends ComboBase
      *  object corresponding to the String.
      *  The <code>inputFormat</code> argument contains the pattern
      *  in which the <code>valueString</code> String is formatted.
-     *  It can contain <code>"M"</code>,<code>"D"</code>,<code>"Y"</code>,
+     *  It can contain <code>"M"</code>,<code>"MM"</code>,<code>"D"</code>,
+	 *  <code>"DD"</code>,<code>"YY"</code>,<code>"YYYY"</code>
      *  and delimiter and punctuation characters.
      *
      *  <p>The function does not check for the validity of the Date object.
@@ -456,56 +457,87 @@ public class DateField extends ComboBase
      */
     public static function stringToDate(valueString:String, inputFormat:String):Date
     {
-        var mask:String
-        var temp:String;
-        var dateString:String = "";
-        var monthString:String = "";
-        var yearString:String = "";
-        var j:int = 0;
-
-        var n:int = inputFormat.length;
-        for (var i:int = 0; i < n; i++,j++)
+        var maskChar:String
+		var dateChar:String;
+		var dateString:String;
+		var monthString:String;
+		var yearString:String;
+		var dateParts:Array = [];
+		var maskParts:Array = [];
+        var part:int = 0;
+		var length:int = valueString.length;
+		
+		dateParts[part] = "";
+        for (var i:int = 0; i < length; i++)
         {
-            temp = "" + valueString.charAt(j);
-            mask = "" + inputFormat.charAt(i);
-
-            if (mask == "M")
-            {
-                if (isNaN(Number(temp)) || temp == " ")
-                    j--;
-                else
-                    monthString += temp;
-            }
-            else if (mask == "D")
-            {
-                if (isNaN(Number(temp)) || temp == " ")
-                    j--;
-                else
-                    dateString += temp;
-            }
-            else if (mask == "Y")
-            {
-                yearString += temp;
-            }
-            else if (!isNaN(Number(temp)) && temp != " ")
-            {
-                return null;
-            }
-        }
-
-        temp = "" + valueString.charAt(inputFormat.length - i + j);
-        if (!(temp == "") && (temp != " "))
-            return null;
-
+			dateChar = valueString.charAt(i);
+ 
+			if (isNaN(Number(dateChar)) || dateChar == " ")
+			{
+				part++;
+				dateParts[part] = dateChar;
+				part++;
+				dateParts[part] = "";
+			}
+			else {
+				dateParts[part] += dateChar;	
+			}
+		}
+		
+		length = inputFormat.length;
+		part = -1;
+		var lastChar:String;
+		
+		for (i = 0; i < length; i++)
+		{
+			maskChar = inputFormat.charAt(i);
+			
+			if (maskChar == "Y" || maskChar == "M" || maskChar == "D")
+			{
+				if (maskChar != lastChar)
+				{
+					part++;
+					maskParts[part] = "";
+				}
+				maskParts[part] += maskChar;
+			}
+			else {
+				part++;
+				maskParts[part] = maskChar;
+			}
+			
+			lastChar = maskChar;
+		}
+		
+		length = maskParts.length;
+		for (i = 0; i < length; i++) {
+			maskChar = maskParts[i].charAt(0);
+			
+			if (maskChar == "D") {
+				dateString = dateParts[i];
+			}
+			else if (maskChar == "M") {
+				monthString = dateParts[i];
+			}
+			else if (maskChar == "Y") {
+				yearString = dateParts[i];
+			}
+		}
+		
+		if (dateParts.length != maskParts.length)
+		{
+			return null;
+		}
+		
+		var dayNum:Number = Number(dateString);
         var monthNum:Number = Number(monthString);
-        var dayNum:Number = Number(dateString);
         var yearNum:Number = Number(yearString);
 
         if (isNaN(yearNum) || isNaN(monthNum) || isNaN(dayNum))
             return null;
 
-        if (yearString.length == 2 && yearNum < 70)
-            yearNum+=2000;
+        if (yearString.length == 2)
+            yearNum += 2000;
 
         var newDate:Date = new Date(yearNum, monthNum - 1, dayNum);
 
@@ -519,7 +551,8 @@ public class DateField extends ComboBase
      *  Formats a Date into a String according to the <code>outputFormat</code> argument.
      *  The <code>outputFormat</code> argument contains a pattern in which
      *  the <code>value</code> String is formatted.
-     *  It can contain <code>"M"</code>,<code>"D"</code>,<code>"Y"</code>,
+     *  It can contain <code>"M"</code>,<code>"MM"</code>,<code>"D"</code>,
+	 *  <code>"DD"</code>,<code>"YY"</code>,<code>"YYYY"</code>
      *  and delimiter and punctuation characters.
      *
      *  @param value Date value to format.
@@ -537,59 +570,75 @@ public class DateField extends ComboBase
      */
     public static function dateToString(value:Date, outputFormat:String):String
     {
-        if (!value)
-            return "";
-
+		var maskChar:String;
+		var maskParts:Array = [];
+		var part:int = 0;
+		var length:int = outputFormat.length;
+		
+		if (!value || isNaN(value.getTime()))
+			return "";
+		
+		length = outputFormat.length;
+		part = -1;
+
+		var lastChar:String;
+		
+		for (var i:int = 0; i < length; i++)
+		{
+			maskChar = outputFormat.charAt(i);
+			
+			if (maskChar == "Y" || maskChar == "M" || maskChar == "D")
+			{
+				if (maskChar != lastChar)
+				{
+					part++;
+					maskParts[part] = "";
+				}
+				maskParts[part] += maskChar;
+			}
+			else {
+				part++;
+				maskParts[part] = maskChar;
+			}
+			
+			lastChar = maskChar;
+		}
+		
         var date:String = String(value.getDate());
-        if (date.length < 2)
-            date = "0" + date;
-
         var month:String = String(value.getMonth() + 1);
-        if (month.length < 2)
-            month = "0" + month;
-
         var year:String = String(value.getFullYear());
 
-        var output:String = "";
         var mask:String;
+		var maskLength:int
+		var output:String = "";
 
-        // outputFormat will be null if there are no resources.
-        var n:int = outputFormat != null ? outputFormat.length : 0;
-        for (var i:int = 0; i < n; i++)
+        length = maskParts.length;
+        for (i = 0; i < length; i++)
         {
-            mask = outputFormat.charAt(i);
-
-            if (mask == "M")
-            {
-                if ( outputFormat.charAt(i+1) == "/" && value.getMonth() < 9 ) {
-                    output += month.substring(1) + "/";
-                } else {
-                    output += month;
-                }
-                i++;    
-            }
-            else if (mask == "D")
-            {
-                if ( outputFormat.charAt(i+1) == "/" && value.getDate() < 10 ) {
-                    output += date.substring(1) + "/";
-                } else {    
-                    output += date;                         
-                }
-                i++;
-            }
-            else if (mask == "Y")
-            {
-                if (outputFormat.charAt(i+2) == "Y")
-                {
-                    output += year;
-                    i += 3;
-                }
-                else
-                {
-                    output += year.substring(2,4);
-                    i++;
-                }
-            }
+            mask = maskParts[i].charAt(0);
+			maskLength = maskParts[i].length;
+			
+			if (mask == "D")
+			{
+				if (maskLength > 1 && date.length == 1)
+					date = "0" + date;
+				
+				output += date;
+			}
+			else if (mask == "M")
+			{
+				if (maskLength > 1 && month.length == 1)
+					month = "0" + month;
+				
+				output += month;
+			}
+			else if (mask == "Y")
+			{
+				if (maskLength == 2)
+					output += year.substr(2,2);
+				else
+					output += year;
+			}
             else
             {
                 output += mask;