以可在 Azure 移动服务 (Javascript) 中查询的方式保存日期时间

Save DateTime in a way that you can query in Azure Mobile Services (Javascript)

本文关键字:查询 方式 保存 时间 日期 Javascript Azure 移动 服务      更新时间:2023-09-26

我想将 DateTime 值保存到 Azure 移动服务后端 (javascript),但如果将其另存为 DateTime,则无法查询该日期。我想这样做的原因是因为我想检索特定日期范围内的所有项目。我尝试将它们保存为即时报价,但这也不起作用,因为数值很大。

有人有想法吗?

这是

不正确的 - 如果您在JS后端中保存日期时间(日期)值,则可以根据该日期进行查询。所有关系操作(>=, <=, <, >, ==, !=)都使用日期值查找。

例如,在下面的JS代码中(对于具有名为so的表的服务),它可以插入4个日期,并发送一个范围查询,该查询将返回两个中间日期。

<html>
  <head>
    <title>Test site</title>
    <script src="http://ajax.aspnetcdn.com/ajax/mobileservices/MobileServices.Web-1.2.5.min.js"></script>
  </head>
  <body>
    <h1>Playing with Azure</h1>
    <button onclick="insertData();">Insert data</button>
    <button onclick="readData();">read data</button>
    <ul id='results'></ul>
    <script type="text/javascript">
        var client = new WindowsAzure.MobileServiceClient(
            "https://SERVICENAME.azure-mobile.net/",
            "APPLICATIONKEY"
        );
        var table = client.getTable("so");
        function handleError(err) {
            addLog('Error: ' + err);
        }
        function addLog(text) {
            var ul = document.getElementById('results');
            var li = document.createElement('li');
            li.appendChild(document.createTextNode(text));
            ul.appendChild(li);
        }
        function insertData() {
            table.insert({ myfield: 12, date: new Date(2014, 11, 1) }).then(function() {
                addLog('Inserted data in December');
                table.insert({ myfield: 11, date: new Date(2014, 10, 1) }).then(function() {
                    addLog('Inserted data in November');
                    table.insert({ myfield: 10, date: new Date(2014, 9, 1) }).then(function() {
                        addLog('Inserted data in October');
                        table.insert({ myfield: 9, date: new Date(2014, 8, 1) }).then(function() {
                            addLog('Inserted data in Setember');
                        }, handleError);
                    }, handleError);
                }, handleError);
            }, handleError);
        }
        function readData() {
            var firstDate = new Date(2014, 8, 15);
            var lastDate = new Date(2014, 10, 15);
            table.where(function(firstDate, lastDate) {
                return this.date >= firstDate && this.date <= lastDate;
            }, firstDate, lastDate).read().done(function(results) {
                addLog('Results.length: ' + results.length);
                for (var i = 0; i < results.length; i++) {
                    addLog('Results[' + i + ']: ' + JSON.stringify(results[i]));
                }
            }, handleError);
        }
    </script>
  </body>
</html>

也可以为托管客户端编写类似的代码。尚未编译它(用记事本编写),但它看起来有点像下面的代码:

private static MobileServiceClient client = new MobileServiceClient(
    "https://SERVICENAME.azure-mobile.net", "APPLICATION_KEY");
private static IMobileServiceTable<MyType> table = client.GetTable<MyType>();
private async void InsertData_Click(object sender, EventArgs args) {
    for (int month = 12; month >= 9; month--) {
        var date = new DateTime(2014, month, 1, 0, 0, 0, DateTimeKind.UTC);
        await table.InsertAsync(new MyType { date = date, myfield = month });
    }
}
private async void ReadData_Click(object sender, EventArgs args) {
    var firstDate = new DateTime(2014, 9, 15, 0, 0, 0, DateTimeKind.UTC);
    var lastDate = new DateTime(2014, 11, 15, 0, 0, 0, DateTimeKind.UTC);
    var items = await table
        .Where(t => t.date >= firstTime && t.date <= lastTime)
        .ToListAsync();
    foreach (var item in items) {
        AddLog("Read item: " + item);
    }
}
public class MyType {
    public string id { get; set; }
    public DateTime date { get; set; }
    public int myfield { get; set; }
}