【问题标题】:Countdown timer not fully working倒数计时器未完全工作
【发布时间】:2016-03-19 09:40:45
【问题描述】:

我的网站上有一个倒数计时器,它倒计时到每周周日下午 3 点,也就是我们的新促销活动开始的时间。计时器似乎只会在秒数达到 30 时减少分钟数,我认为小时数也是如此。这是为我提供的代码,计时器可以在我的网页上看到。http://www.onlinecarbooty.com/go-booting-front.aspx

VB...

    Dim seconds As Integer = DateDiff(DateInterval.Second, Date.Now, BootSale.nextDOW(DayOfWeek.Sunday))
    Dim days, hours, minutes As Integer
    days = seconds / 86400
    hours = (seconds Mod 86400) / 3600
    minutes = (seconds Mod 3600) / 60
    lblTimer.Text = days & " Day(s) " & hours & " Hour(s) " & minutes & " Minute(s) " ' & seconds Mod 60 & " Seconds"

    If Date.Now.DayOfWeek.ToString = "Sunday" And Date.Now.Hour >= 15 Then
        lblTimer.Text = "NEW SALE JUST GONE LIVE!"
    End If

Protected Sub timer1_tick(sender As Object, e As EventArgs)
    Dim seconds As Integer = DateDiff(DateInterval.Second, Date.Now, BootSale.nextDOW(DayOfWeek.Sunday))
    Dim days, hours, minutes As Integer
    days = seconds / 86400
    hours = (seconds Mod 86400) / 3600
    minutes = (seconds Mod 3600) / 60
    lblTimer.Text = days & " Day(s) " & hours & " Hour(s) " & minutes & " Minute(s) " & seconds Mod 60 & " Seconds"
End Sub

前端...

<asp:Timer ID="timer1" runat="server" Interval="1000" OnTick="timer1_tick"></asp:Timer>

<asp:UpdatePanel id="updPnl" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <h2 class="boldStyle">NEW Sale starts in <asp:Label ID="lblTimer" runat="server"></h2></asp:Label></h2>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="timer1" EventName="tick" />
    </Triggers>
</asp:UpdatePanel>

【问题讨论】:

  • 听起来像某处的四舍五入问题(向上或向下)......不确定我的猜测是否正确。请检查这种可能性...
  • 这听起来很合理,伊恩,谢谢你的回复。不过仍然不确定如何解决它。我只是在学习编程。除非有人知道,否则我会用谷歌搜索如何向上或向下舍入?再次感谢。

标签: asp.net vb.net time timer countdown


【解决方案1】:

我不想在您提供的代码中检查问题的原因,而是直接提出另一种解决方案。

我建议你使用我的 TimeMeasurer 类来表示倒计时或计时器,所有这些都以简单的方式使用事件处理程序来通知时间变化。

使用此类的倒计时示例:

Private WithEvents countdown As New TimeMeasurer()

' Label used to display the remaining time.
Private lblCountdown As Label = Me.Label1

Private Shadows Sub Shown() Handles MyBase.Shown

    ' The time interval for the TimeUpdated event to raise.
    Me.countdown.UpdateInterval = 100 ' ms

    ' Run a countdown of 1 minute.
    Me.countdown.Start(TimeSpan.FromMinutes(1.0R))

End Sub

Private Sub Countdown_TimeUpdated(sender As Object, e As TimeMeasurerUpdatedEventArgs) _
Handles countdown.TimeUpdated

    ' Measure H:M:S:MS
    Me.lblCountdown.Text = 
       String.Format("{0:00}:{1:00}:{2:00}:{3:000}",
                     e.Remaining.Hours, e.Remaining.Minutes, 
                     e.Remaining.Seconds, e.Remaining.Milliseconds)

    If (e.Elapsed.Subtract(e.Remaining) = e.Goal) Then
        Me.lblCountdown.Text = "Countdown Done!"
    End If

End Sub

另一个例子可以在源代码文档中找到。

随意使用它或根据需要调整它。您可以自己检查源代码来避免您提到的问题。

希望对你有帮助!

【讨论】:

  • 谢谢。正如我所说,我只是在学习.. 如果我只是在前端添加一个标签来显示它,该代码会按原样工作吗?只是不完全确定我在做什么:-)
  • @Eggybread 好吧,我真的不管理 ASP.Net,但是从那个事件处理程序中,您可以获取带有倒计时数据的 e 事件数据来显示它如您所愿,我使用了标签。源代码将按原样工作,唯一额外的“依赖”或引用的成员是这个枚举:github.com/ElektroStudios/ElektroKit/blob/…github.com/ElektroStudios/ElektroKit/blob/…
  • 请注意重要的事情:避免使用 DateDiff(以及 VisualBasic 命名空间的任何成员)以及自定义算术计算,而不是所有这些您可以使用 TimeSpan,它会在其属性中公开所有需要的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多