下面小编就为大家带来一篇 js 和 C# 时间日期格式转换的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
下午在搞 MVC 和 EXTJS 的日期格式互相转换遇到了问题,我们从. NET 服务器端序列化一个 DateTime 对象的结果是一个字符串格式,如'/Date(1335258540000)/' 这样的字串。
整数 1335258540000 实际上是一个 1970 年 1 月 1 日 00:00:00 至这个 DateTime 中间间隔的毫秒数。通过 javascript 用 eval 函数可以把这个日期字符串转换为一个带有时区的 Date 对象,如下
用 var date = eval('new' + eval('/Date(1335258540000)/').source) 这样即可得到一个 JS 对象
通过 alert(date) 查看比较清楚。
Tue Apr 24 17:09:00 UTC+0800 2012
上面是 C# JSON 序列化日期自动得到的字符串,也可以通过 C# 写一个函数来获取这个数字,例如
- public long MilliTimeStamp(DateTime TheDate)
- {
- DateTime d1 = new DateTime(1970, 1, 1);
- DateTime d2 = TheDate.ToUniversalTime();
- TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
- return (long)ts.TotalMilliseconds;
- }
通过上面的函数跟利用 JSON 序列化获取到的字符串中的整数是一样的。
但是,在从客户端返回服务器端的时候,日期却遇到了问题,如何将 javascript 的 Date 对象传回服务器端呢?
先通过 javascript Date 中的 getTime() 来获取到这个整数,然后服务器端对这个整数进行解析,'构造'成一个 C# 的 DateTime 对象。思路大概是这样的,不过在逆向回去的时候却遇到了点麻烦。
- public DateTime ConvertTime(long milliTime)
- {
- long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 ;
- return new DateTime(timeTricks);
- }
通过 ConvertTime 得到的结果发现时间少了 8 个小时,这刚好是服务器的时区,东八区时间,也就是说还要加上 8 小时的纳秒,因为 C# 的时间戳单位是一千万分之一秒,一个小时 3600 秒,即 8*3600*10000000
所以修改了 ConvertTime 函数,正确的如下:
- public DateTime ConvertTime(long milliTime)
- {
- long timeTricks = new DateTime(1970, 1, 1).Ticks + milliTime * 10000 + TimeZone.CurrentTimeZone.GetUtcOffset(DateTime.Now).Hours * 3600 * (long)10000000;
- return new DateTime(timeTricks);
- }
以上这篇 js 和 C# 时间日期格式转换的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 phperz。
来源: http://www.phperz.com/article/17/0227/265362.html