在javascript中将unix时间戳转换为.NET Date Time

时间:2014-02-28 00:13:40

标签: javascript asp.net unix epoch momentjs

我正在与api接口,他们使用.NET所以我的所有时间戳都需要符合.NET的日期时间格式,看起来像这样

/Date(1379142000000-0700)/ 

我想使用javascript将unix次转换为此格式。我已经看到了moment.js的这个函数,但这不会返回unix / epoch格式,而且它的方向错误。

如何使用javascript将unix时间戳转换为.net时间格式?

使用moment.js的解决方案很好,也可以从.net转换为unix。

1 个答案:

答案 0 :(得分:0)

如果你有一个日期对象,你似乎需要UTC毫秒时间值和时区偏移量,以小时和分钟为单位(hhmm)。因此假设UNIX时间值是UTC并且“.NET”时间字符串是具有偏移量的本地时间值,则:

function unixTimeToDotNetString(v) {

  // Simple fn to add leading zero to single digit numbers
  function z(n){return (n<10? '0' : '') + n;}

  // Use UNIX UTC value to create a date object with local offset
  var d = new Date(v * 1e3);

  // Get the local offset (mins to add to local time to get UTC)
  var offset = d.getTimezoneOffset();

  // Calculate local time value by adding offset
  var timeValue = +d + offset * 6e4;

  // Get offset sign - reverse sense
  var sign = offset < 0? '+' : '-';

  // Build offset string as hhmm
  offset = Math.abs(offset);
  var hhmm = sign + z(offset / 60 | 0);
  hhmm += z(offset % 60);

  // Combine with time value
  return  timeValue + hhmm;
}

var unixTime = 1393552984;
console.log(unixTime + ' : ' + unixTimeToDotNetString(v)); // 1393552984 : 1393517104000+1000 

两个时间值之间的差异应该等于以毫秒为单位的偏移量(在这种情况下,时区是UTC + 1000,它是36000000)。