Javascript jQuery日期选择器unix时间戳
我使用jQuery datepicker添加了一个datepicker,并使用altFormat'@'-->请参见 当用户选择一个值时,unix时间戳被设置。 大约:131284080000 这是以毫秒为单位的,所以我需要/1000 但是当我用C中的函数转换时间戳时# 我总是比以前早一天 我做错了什么 更新: 当我使用javascript gettime()的内置函数时 我得到了正确的时间戳Javascript jQuery日期选择器unix时间戳,javascript,jquery,datepicker,Javascript,Jquery,Datepicker,我使用jQuery datepicker添加了一个datepicker,并使用altFormat'@'-->请参见 当用户选择一个值时,unix时间戳被设置。 大约:131284080000 这是以毫秒为单位的,所以我需要/1000 但是当我用C中的函数转换时间戳时# 我总是比以前早一天 我做错了什么 更新: 当我使用javascript gettime()的内置函数时 我得到了正确的时间戳 我得到的getTime()示例: 30-08-2011-->1314628036 我得到的日期选择器
- 我得到的getTime()示例: 30-08-2011-->1314628036
这也是日期选择器中的记号(!)。可能是.NET不知道它是什么时区。您必须对此进行定义。这显然是一个时区问题
getTime()
此函数返回“epoch”后的毫秒数,这意味着您可以从本地计算机上看到
Unix timestamp*1000
。
看
datepicker({altFormat:'@'})
我在
jQuery
库中看到,datepicker
在内部使用formatDate
函数,该函数考虑了时区
(我从这里开始:…)
所以,在我的电脑上,我有两个小时的差异。
我想不出一个简单的方法来解决这个问题,但您可以尝试以下方法:
关于您的代码,您必须执行以下操作:
private static DateTime ConvertFromUnixTimestamp(double timestamp)
{
var origin = new DateTime(1970, 1, 1, 0, 0, 0, 0);
return origin.AddSeconds(timestamp - origin.getTime());
}
这是因为大多数时区中的1月1日对应于大于0或1的UnixtTime值。因此,您必须更正确地设置(而不是添加)时间戳到Datetime
对象(如果您有setter)。往返精度
Unix时间(自1970年1月1日起的毫秒)的精度低于.Net日期时间,因此对于往返到.Net代码的时间,或者如果与.Net日期时间相比,这是预期的精度。例如,.Net->Unix->.Net可以按此金额关闭
var unixEpochPrecision = new TimeSpan(TimeSpan.TicksPerMillisecond);
这可能并不重要,但你至少应该意识到这一点
转换为Unix
开始时需要UTC日期,否则您将离开几个小时。这是有意义的,因为Unix时间(不考虑时区)总是以UTC表示。要是.net是那样就好了
DateTime UnixEpochBaseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Int64 ToUnixTime(DateTime utcValue)
{
if (utcValue.Kind != DateTimeKind.Utc)
throw new ArgumentException("Value must be in Utc.");
var result = (utcValue - UnixEpochBaseDate).Ticks / TimeSpan.TicksPerMillisecond;
return result;
}
从Unix历元转换为CLR日期时间
只需按原样使用毫秒。这也使得JavaScript更容易编码
DateTime ToClrDateTime(Int64 unixEpochMilliseconds)
{
var clrDateTime = UnixEpochBaseDate +
new TimeSpan(unixEpochMilliseconds * TimeSpan.TicksPerMillisecond);
return clrDateTime;
}
在JavaScript中
var date = new Date(1381367291665);
您是否尝试过新的日期时间(1970年1月1日)代码>?您的第二个代码段使用的是哪种语言?可能是因为sumemr/wintertime或客户端的其他时区?如果你把一天设置为00:00:00,那么在这里错1秒就足够了。新的日期时间(1,1,1,0,0,timestamp)给出了正确的日期吗?我试过使用新的日期时间(1970,1,1),但没有成功,我从1970年起有一年的时间
DateTime UnixEpochBaseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
Int64 ToUnixTime(DateTime utcValue)
{
if (utcValue.Kind != DateTimeKind.Utc)
throw new ArgumentException("Value must be in Utc.");
var result = (utcValue - UnixEpochBaseDate).Ticks / TimeSpan.TicksPerMillisecond;
return result;
}
DateTime ToClrDateTime(Int64 unixEpochMilliseconds)
{
var clrDateTime = UnixEpochBaseDate +
new TimeSpan(unixEpochMilliseconds * TimeSpan.TicksPerMillisecond);
return clrDateTime;
}
var date = new Date(1381367291665);