【问题标题】:BidSystem, online auction, problem with timingBidSystem,在线拍卖,时间问题
【发布时间】:2010-09-30 20:46:03
【问题描述】:

伙计们! 我正在开发一个有时间限制的在线拍卖。

结束时间段仅针对一次公开拍卖

登录网站后,我会显示公开拍卖的剩余时间。时间是这样计算的:

EndDateTime = 拍卖结束的日期和时间;
DateTime.Now() = 当前日期和时间

timeLeft= (EndDateTime - DateTime.Now()).Seconds().

在javascript中,我更新了剩下的时间:

timeLeft=timeLeft-1

问题是当我同时从不同浏览器登录时,浏览器显示不同的倒计时。

请帮帮我!

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    由于服务器处理时间和下载页面所需的时间,我想总会有几秒钟的差异。

    最好的方法是实际将结束时间发送到浏览器,然后在 javascript 中计算剩余时间。这样时间应该是相同的(当然是在同一台机器上)。

    【讨论】:

    • +1,但我会将结束时间和当前日期时间都发送到浏览器。这样一来,您就不必依赖客户端计算机与世界其他地方同步……而它们通常不是
    • 另外,我会有一个 ajax 请求,它每 10 秒左右从服务器获取更新。这样,如果客户端浏览器的计时器分辨率不正常,那么它会很快回到正轨。
    • 确实需要考虑时区差异,非常重要!
    • 我会通过从服务器发送“仅”剩余的秒数(或者实际上是“毫秒”剩余的时间)来简化这一点。那么无论时区如何,每个人都在同一个基地。
    • 这正是他现在正在做的事情,但是从在服务器上计算剩余秒数到浏览器中的 javascript 开始倒计时会有一点延迟
    【解决方案2】:

    罗马,

    我看了一眼 eBay(他们对这些东西了解一两件事 :))并注意到一旦项目在最后 90 秒内,每 2 秒触发一次 GET 请求以更新变量javascript 通过 json 响应。您可以在 firebug/fiddler 中查看它以了解它的作用。

    这里是它下拉的 json 示例:

    {
       "ViewItemLiteResponse":{
          "Item":[
             {
                "IsRefreshPage":false,
                "ViewerItemRelation":"NONE",
                "EndDate":{
                   "Time":"12:38:48 BST",
                   "Date":"01 Oct, 2010"
                },
                "LastModifiedDate":1285932821000,
                "CurrentPrice":{
                   "CleanAmount":"23.00",
                   "Amount":23,
                   "MoneyStandard":"£23.00",
                   "CurrencyCode":"GBP"
                },
                "IsEnded":false,
                "AccessedDate":1285933031000,
                "BidCount":4,
                "MinimumToBid":{
                   "CleanAmount":"24.00",
                   "Amount":24,
                   "MoneyStandard":"£24.00",
                   "CurrencyCode":"GBP"
                },
                "TimeLeft":{
                   "SecondsLeft":37,
                   "MinutesLeft":1,
                   "HoursLeft":0,
                   "DaysLeft":0
                },
                "Id":160485015499,
                "IsFinalized":false,
                "ViewerItemRelationId":0,
                "IsAutoRefreshEnabled":true
             }
          ]
       }
    }
    

    您可以在代码中执行类似的操作。

    [edit] - 进一步查看 eBay 代码,尽管它仅在最后 90 秒内运行密集的 GET 请求,但在页面初始加载时添加了与上述相同的 json好。然后,在 3 分钟左右,GET 请求每 10 秒运行一次。因此,我假设无论是否超过 90 秒,都会针对该结构运行相同的 javascript。

    【讨论】:

    • 我认为这个信息当时没用:)
    【解决方案3】:

    这可能是 javascript 以不同速度加载的问题, 或者 setInterval 将根据循环在稍微不同的时间触发

    我会调查这两个

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多