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;