从Javascript到C#获取正确的日期(以毫秒为单位)

Get Correct Date In Milliseconds From Javascript To C#

本文关键字:为单位 日期 Javascript 获取      更新时间:2023-09-26

我使用moment将日期字符串转换为日期对象,然后获取该日期的毫秒数,并将其作为查询字符串传递给服务器问题是,当我试图将javascript转换为C#中的DateTime时,我从javascript中得到的毫秒数总是给我不同的日期

javascript

function RedirectToOptions() {
    var iBranchId = $('#ddl_Branches').val();
    var strDate = $('#txt_datepicker').val();
    var dtDate = moment(strDate);
    var iDate = dtDate.toDate().getTime();
    var capitalActionUrl = '@Html.Raw(@Url.Action("Revenue", new {BranchId = "_id_", DateTimeStamp = "_date_" }))';
    var branchCapitalUrl = capitalActionUrl.replace("_id_", iBranchId);
    var branchCapitalUrl = branchCapitalUrl.replace("_date_", iDate);
    window.location.replace(branchCapitalUrl);
}

C#

public ActionResult Revenue(int? BranchId, double? DateTimeStamp)
{
    DateTime? date = (DateTimeStamp.HasValue) ? (DateTime?)DateTimeConverter.FromUnixToDateTime(DateTimeStamp.Value) : null;
    IEnumerable<RevenueDTO> revenueDTO = _Client.GetRevenue(BranchId, date);
    IEnumerable<RevenueViewModel> revenue = ViewModelConverter.RevenueDTOToRevenueViewModel(revenueDTO);
    List<BranchDTO> branchesDTO = _Client.GetAllBranches().ToList();
    var branches = ViewModelConverter.BranchDTOToBranchesViewModelList(branchesDTO);
    ViewBag.Branches = branches;
    return View(revenue);
}

转换为日期时间

public static DateTime FromUnixToDateTime(double UnixTimeStamp)
{
    DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0);
    dateTime = dateTime.AddMilliseconds(UnixTimeStamp);
    return dateTime;
}

当我试图在转换时通过2016年5月1日(dd/MM/yyyy格式)时,由于某种原因,它变成了2016年4月1日

有一种更好的方法可以将日期对象传递给C#,那就是使用普通的ISO 8601标准格式(例如2016-01-01T12:00:00.568Z)。如果您在日期上调用toJSON(),C#中的绑定器应该自动将其转换为具有适当时区的C#日期时间。

与处理原始毫秒数相比,您将能够在javascript中查看时间序列号是否与毫秒不匹配。

你可以在这里阅读更多。

如果您正在使用epoch,请确保所有时区都设置为UTC(然后转换为本地时区)。。。在Javascript中:

// ...
var dtDate = moment.utc(strDate);
// ...

在C#中:

// ...
DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
// ...