/// <summary> /// Executes the days away expresssion to get a date x days away. /// </summary> /// <param name="expr"></param> /// <returns></returns> public object VisitDuration(DurationExpr expr) { var name = expr.Duration; var num = 0.0; // Case 1: daysAhead days away if(this.Ctx.Symbols.Contains(name)) { var variable = this.Ctx.Memory.Get<object>(name) as LObject; if(variable.Type != LTypes.Number) { throw new LangException("TypeError", "Days away must of type of number", expr.Ref.ScriptName, expr.Ref.Line, expr.Ref.CharPos); } num = ((LNumber) variable).Value; } // Case 2: 3 days away else { num = Convert.ToInt32(name); } // Now convert to relative "days away". TimeSpan duration = TimeSpan.MinValue; var mode = expr.Mode.ToLower(); if (mode == "days") { duration = new TimeSpan(Convert.ToInt32(num), 0, 0, 0); } if (mode == "hours") { duration = new TimeSpan(0, Convert.ToInt32(num), 0, 0); } if (mode == "minutes") { duration = new TimeSpan(0, 0, Convert.ToInt32(num), 0); } if (mode == "seconds") { duration = new TimeSpan(0, 0, 0, Convert.ToInt32(num)); } return new LTime(duration); }
/// <summary> /// Creates a relative date expression with symbol scope, context, script refernce set. /// The date expression can handle relative dates: 3rd monday of january /// </summary> /// <param name="daysAway">The number of days away.</param> /// <param name="token"></param> /// <returns></returns> public static Expr Duration(string duration, string mode, TokenData token) { var exp = new DurationExpr(); exp.Duration = duration; exp.Mode = mode; SetupContext(exp, token); return exp; }
public object VisitDuration(DurationExpr expr) { return null; }