繁体   English   中英

DateTime 到 javascript 日期

[英]DateTime to javascript date

Stackoverflow 上的另一个答案是从 Javascript 日期到 .net DateTime 的转换:

long msSinceEpoch = 1260402952906; // Value from Date.getTime() in JavaScript
return new DateTime(1970, 1, 1) + new TimeSpan(msSinceEpoch * 10000);

但是反过来怎么做呢? 日期时间到 Javascript 日期?

尝试:

return DateTime.Now.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds

编辑:真正的 UTC 更好,但我们需要保持一致

return DateTime.UtcNow
               .Subtract(new DateTime(1970,1,1,0,0,0,DateTimeKind.Utc))
               .TotalMilliseconds;

虽然,再想一想也没关系,只要两个日期在同一时区即可。

JavaScript 日期构造函数接受自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的毫秒数。 这是将 .Net DateTime 对象转换为 JavaScript 日期的 C# 扩展方法:

public static class DateTimeJavaScript
{
   private static readonly long DatetimeMinTimeTicks =
      (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).Ticks;

   public static long ToJavaScriptMilliseconds(this DateTime dt)
   {
      return (long)((dt.ToUniversalTime().Ticks - DatetimeMinTimeTicks) / 10000);
   }
}

JavaScript 用法:

var dt = new Date(<%= DateTime.Today.ToJavaScriptMilliseconds() %>);
alert(dt);

你可以在你的 Action 中试试这个:

return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss");

这在你的 Ajax 成功中:

success: function (resultDateString) {
    var date = new Date(resultDateString);
}

或者在你的视图中:(Javascript 加 C#)

var date = new Date('@DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss")');

使用Moment.js只需使用:

var jsDate = moment(netDateTime).toDate();

其中netDateTime是您序列化的 DateTime 变量,类似于"/Date(1456956000000+0200)/"

这应该可以解决问题:

date.Subtract(new DateTime(1970, 1,1)).TotalMilliseconds

我知道这有点晚了,但是当您想要独立于时区时,这是我必须提出的处理日期的解决方案。 本质上,它涉及将所有内容转换为 UTC。

从 Javascript 到服务器

将日期作为纪元值发送出去,并删除时区偏移。

var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
  url: '/target',
  params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});

然后服务器收到 1420070400000 作为日期纪元。

在服务器端,将该纪元值转换为日期时间对象:

DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);

此时,日期只是用户提供的日期/时间。 实际上它是UTC。

走另一条路

当服务器从数据库中提取数据时,大概是 UTC,将差异作为一个纪元(确保两个日期对象都是本地或 UTC):

long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

或者

long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;

当 javascript 接收到这个值时,创建一个新的日期对象。 但是,此日期对象将假定为当地时间,因此您需要将其偏移当前时区:

var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))

console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)

据我所知,这应该适用于您需要显示与时区无关的日期的任何时区。

另一个迟到的答案,但这里没有。 如果你想在 javascript 中处理序列化/Date(1425408717000)/转换,你可以简单地调用:

var cSharpDate = "/Date(1425408717000)/"
var jsDate = new Date(parseInt(cSharpDate.replace(/[^0-9 +]/g, '')));

资料来源: amirsahib

这种方法对我有用:

   public sCdateToJsDate(cSDate: any): Date {
        // cSDate is '2017-01-24T14:14:55.807'
        var datestr = cSDate.toString();
        var dateAr = datestr.split('-');
        var year = parseInt(dateAr[0]);
        var month = parseInt(dateAr[1])-1;
        var day = parseInt(dateAr[2].substring(0, dateAr[2].indexOf("T")));
        var timestring = dateAr[2].substring(dateAr[2].indexOf("T") + 1);
        var timeAr = timestring.split(":");
        var hour = parseInt(timeAr[0]);
        var min = parseInt(timeAr[1]);
        var sek = parseInt(timeAr[2]);
        var date = new Date(year, month, day, hour, min, sek, 0);
        return date;
    }

如果您将 MVC 与 razor 一起使用

-----剃刀/C#

var dt1 = DateTime.Now.AddDays(14).Date;
    var dt2 = DateTime.Now.AddDays(18).Date;

    var lstDateTime = new List<DateTime>();
    lstDateTime.Add(dt1);
    lstDateTime.Add(dt2);

---Javascript

$(function() {

            var arr = []; //javascript array

            @foreach (var item in lstDateTime)
             {
                @:arr1.push(new Date(@item.Year, @(item.Month - 1), @item.Day));
             }
  • 1:在C#中创建列表并填充它
  • 2:在javascript中创建一个数组
  • 3:使用razor迭代列表
  • 4:使用@:切换回js和@切换到C#
  • 5:月中的-1 修正js中的月数。

祝你好运

<input type="hidden" id="CDate" value="<%=DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")%>" />

为了将日期转换为 JS 日期(所有数字):

var JSDate = $("#CDate").val();
JSDate = Date.parse(JSDate);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM