Javascript jQuery日期选择器unix时间戳

Javascript jQuery日期选择器unix时间戳,javascript,jquery,datepicker,Javascript,Jquery,Datepicker,我使用jQuery datepicker添加了一个datepicker,并使用altFormat'@'-->请参见 当用户选择一个值时,unix时间戳被设置。 大约:131284080000 这是以毫秒为单位的,所以我需要/1000 但是当我用C中的函数转换时间戳时# 我总是比以前早一天 我做错了什么 更新: 当我使用javascript gettime()的内置函数时 我得到了正确的时间戳 我得到的getTime()示例: 30-08-2011-->1314628036 我得到的日期选择器

我使用jQuery datepicker添加了一个datepicker,并使用altFormat'@'-->请参见

当用户选择一个值时,unix时间戳被设置。 大约:131284080000

这是以毫秒为单位的,所以我需要/1000

但是当我用C中的函数转换时间戳时#

我总是比以前早一天

我做错了什么

更新: 当我使用javascript gettime()的内置函数时

我得到了正确的时间戳

  • 我得到的getTime()示例: 30-08-2011-->1314628036
我得到的日期选择器示例: 2011年8月29日-->1314568800


这也是日期选择器中的记号(!)。

可能是.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);