Skip to content

Instantly share code, notes, and snippets.

@gonchar
Created April 28, 2015 11:01
Show Gist options
  • Save gonchar/fda7f87049829361bd35 to your computer and use it in GitHub Desktop.
Save gonchar/fda7f87049829361bd35 to your computer and use it in GitHub Desktop.
DateUtil
/** Parses dates that conform to the xs:DateTime format. */
public static function parse(str : String) : Date {
if (str == null) return null;
var finalDate : Date;
try {
var dateStr : String = str.substring(0, str.indexOf("T"));
var timeStr : String = str.substring(str.indexOf("T") + 1, str.length);
var dateArr : Array = dateStr.split("-");
var year : Number = Number(dateArr.shift());
var month : Number = Number(dateArr.shift());
var date : Number = Number(dateArr.shift());
var multiplier : Number;
var offsetHours : Number;
var offsetMinutes : Number;
var offsetStr : String;
if (timeStr.indexOf("Z") != -1) {
multiplier = 1;
offsetHours = 0;
offsetMinutes = 0;
timeStr = timeStr.replace("Z", "");
}
else if (timeStr.indexOf("+") != -1) {
multiplier = 1;
offsetStr = timeStr.substring(timeStr.indexOf("+") + 1, timeStr.length);
offsetHours = Number(offsetStr.substring(0, offsetStr.indexOf(":")));
offsetMinutes = Number(offsetStr.substring(offsetStr.indexOf(":") + 1, offsetStr.length));
timeStr = timeStr.substring(0, timeStr.indexOf("+"));
}
else // offset is -
{
multiplier = -1;
offsetStr = timeStr.substring(timeStr.indexOf("-") + 1, timeStr.length);
offsetHours = Number(offsetStr.substring(0, offsetStr.indexOf(":")));
offsetMinutes = Number(offsetStr.substring(offsetStr.indexOf(":") + 1, offsetStr.length));
timeStr = timeStr.substring(0, timeStr.indexOf("-"));
}
var timeArr : Array = timeStr.split(":");
var hour : Number = Number(timeArr.shift());
var minutes : Number = Number(timeArr.shift());
var secondsArr : Array = (timeArr.length > 0) ? String(timeArr.shift()).split(".") : null;
var seconds : Number = (secondsArr != null && secondsArr.length > 0) ? Number(secondsArr.shift()) : 0;
var milliseconds : Number = (secondsArr != null && secondsArr.length > 0) ? 1000 * parseFloat("0." + secondsArr.shift()) : 0;
var utc : Number = Date.UTC(year, month - 1, date, hour, minutes, seconds, milliseconds);
var offset : Number = (((offsetHours * 3600000) + (offsetMinutes * 60000)) * multiplier);
finalDate = new Date(utc - offset);
if (finalDate.toString() == "Invalid Date")
throw new Error("This date does not conform to W3CDTF.");
}
catch (e : Error) {
var eStr : String = "Unable to parse the string [" + str + "] into a date. ";
eStr += "The internal error was: " + e.toString();
throw new Error(eStr);
}
return finalDate;
}
public static function toString(d : Date) : String {
if (d == null) return null;
var date : Number = d.getUTCDate();
var month : Number = d.getUTCMonth();
var hours : Number = d.getUTCHours();
var minutes : Number = d.getUTCMinutes();
var seconds : Number = d.getUTCSeconds();
var milliseconds : Number = d.getUTCMilliseconds();
var sb : String = d.fullYearUTC.toString();
sb += "-";
if (month + 1 < 10) sb += "0";
sb += month + 1;
sb += "-";
if (date < 10) sb += "0";
sb += date;
sb += "T";
if (hours < 10) sb += "0";
sb += hours;
sb += ":";
if (minutes < 10) sb += "0";
sb += minutes;
sb += ":";
if (seconds < 10) sb += "0";
sb += seconds;
if (milliseconds > 0) {
sb += ".";
if (milliseconds < 100) sb += "0";
if (milliseconds < 10) sb += "0";
sb += milliseconds;
}
sb += "Z"; //instead of: sb += "-00:00";
return sb;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment