问题描述
我有一个日期时间字段,用于保存考试的结束日期时间。它来自数据库。 我想用这个字段创建倒数计时器。我有倒数计时器代码,但我不知道如何使用结束日期时间。 这是javascript代码:
var countDownDate = new Date(Date.parse(endTime));
var x = setInterval(function () {
// Get today's date and time
var Now = new Date().getTime();
// Find the distance between Now and the count down date
var distance = countDownDate - Now;
// Time calculations for days,hours,minutes and seconds
var days = Math.floor(distance / (1000 * 60 * 60 * 24));
var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var seconds = Math.floor((distance % (1000 * 60)) / 1000);
// display the result in the element with id="demo"
document.getElementById("demo").innerHTML = days + "d " + hours + "h "
+ minutes + "m " + seconds + "s ";
// If the count down is finished,write some text
if (distance < 0) {
clearInterval(x);
document.getElementById("demo").innerHTML = "EXPIRED";
}
},1000);
我认为这是结束时间:
@{
ViewData["Title"] = "ShowQuestions";
Layout = "~/Views/Shared/_Layout.cshtml";
DateTime start = ViewBag.StartTime;
DateTime endTime = ViewBag.EndTime;
}
当我运行这个时,它什么也没显示。我应该写什么:
var countDownDate=...
解决方法
不要在前端应用中发送c#数据时间响应,发送日期时间字符串格式yyyy-mm-dd格式响应
,尝试添加 @ 字符,如下所示: var countDownDate = new Date(Date.parse(@endTime)) 要么 var countDownDate = new Date(Date.parse('@Html.Raw(endTime)'))
,如果您只是在 C# 方面转换为 JavaScript 日期可能会更容易。
JavaScript 日期是一个数字,表示自 1970 年 1 月 1 日 UTC 以来的毫秒数。这类似于 Unix 纪元时间,只是 Unix 纪元以秒而不是毫秒表示。现在,您使用的 DateTime 类指的是机器时间(或本地时间,具体取决于机器的配置方式)。除非考虑时区,否则无法直接转换为 JavaScript 时间。
DateTimeOffset 类会为您处理所有这些。该类包含本地时间和 UTC 时间的偏移量。它有一个方法来获取它的值并将其作为与 JavaScript Date 对象兼容的 long 返回。但这并不直接对您有用,因为您从数据库接收 DateTime。 (我将忽略在数据库中存储 DateTime 而不是 DateTimeOffset 是不好的形式这一事实。:-))
幸运的是,您可以将 DateTime 转换为 DateTimeOffset。 Convert from DateTime to DateTImeOffset。
下面的代码说明了获取当前时间的 DateTimeOffset 并将其打印为 JavaScript 日期兼容数字。它还向您展示了将 DateTime 结构转换为 DateTimeOffset 结构是多么容易,假设您愿意简单地接受本地时区以创建与 UTC 的偏移量。就您而言,您只需要一个倒数计时器,这样就可以了。
class Program
{
static void Main(string[] args)
{
var dateTimeOffset = DateTimeOffset.Now;
Console.WriteLine($"Current time expressed as a JavaScript Date is {dateTimeOffset.ToUnixTimeMilliseconds()}");
var now = DateTime.Now;
DateTimeOffset nowDateTimeOffset = now;
Console.WriteLine($"Current time expressed as a JavaScript Date after conversion is {nowDateTimeOffset.ToUnixTimeMilliseconds()}");
}
}