如何通过规则与jsonLogic.Net比较日期

问题描述 投票:0回答:1

我正在使用 jsonLogic net 来验证输入数据。想要将输入日期与规则中定义的日期进行比较。但无法找到日期运算符。有没有办法在不解析输入数据的情况下比较日期?

我可以使用规则中定义的占位符来解析日期或当前日期。但如何将其与输入数据中提供的日期进行比较呢?

c# date jsonlogic
1个回答
0
投票

嗨,我对这个库不太熟悉,但我根据 github 库中的示例进行了快速单元测试。由于 json 中的日期只是字符串,如果您可以控制格式,我认为标准小于/大于运算符应该仍然有效,前提是时间以 UTC 和 24 小时格式标准化。

using FluentAssertions;
using JsonLogic.Net;
using Newtonsoft.Json.Linq;

namespace FunctionTesting.Json.JsonLogic;

public class JsonLogicTests
{
    [Theory]
    [MemberData(nameof(SampleTests))]
    public void JsonLogic_TestDateEvaluator(string op, DateTime sampleDate, DateTime ruleDate, bool expectedResult)
    {
        //arrange
        // The data that the rule will run against.
        var format = "yyyyMMddTHH:mm:ss";
        object data = new {MyDate = sampleDate.ToString(format)};

        // Rule definition retrieved as JSON text
        string jsonText=$"{{\"{op}\": [{{\"var\": \"MyDate\"}}, \"{ruleDate.ToString(format)}\"]}}";
        var rule = JObject.Parse(jsonText);
        var operators = EvaluateOperators.Default;
        
        var evaluator = new JsonLogicEvaluator(operators);
        
        // act
        object result = evaluator.Apply(rule, data);
        
        // assert
        result.Should().BeOfType<bool>().And.Be(expectedResult);

    }

    public static IEnumerable<object[]> SampleTests()
    {
        var sampleDate = DateTime.UtcNow;
        yield return new object[] { ">", sampleDate, sampleDate.AddDays(-1), true };
        yield return new object[] { "<", sampleDate, sampleDate.AddDays(-1), false };
        yield return new object[] { "<", sampleDate, sampleDate.AddDays(1), true };
        yield return new object[] { ">", sampleDate, sampleDate.AddDays(1), false };
        yield return new object[] { "==", sampleDate, sampleDate, true };
    }
}

您应该能够为您的用例添加测试用例,但如果有限制,您可能必须添加自定义运算符,然后最终解析日期。

© www.soinside.com 2019 - 2024. All rights reserved.