【问题标题】:Converting unix timestamp to a .NET Date Time in javascript在 javascript 中将 unix 时间戳转换为 .NET 日期时间
【发布时间】:2014-03-31 18:31:52
【问题描述】:

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

/Date(1379142000000-0700)/ 

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

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

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

【问题讨论】:

  • (1379142000 * 1000).toString() + '-0700'
  • A Unix timestamp 定义为 the number of seconds that have elapsed since 00:00:00 Coordinated Universal Time (UTC), Thursday, 1 January 1970。所以乘以1000 得到毫秒,转换为字符串并添加偏移字符串。
  • 感谢您编辑您的问题。 .NET 没有设置“日期/时间格式”。这取决于服务器的文化。无论如何,您不会转换为 .NET DateTime,只是转换为 .NET 可能会转换为 DateTime 对象的字符串。
  • @Xotic750—(1379142000 * 1000) + '-0700' 就足够了。 :-)
  • 确实:为了清楚起见很冗长:)

标签: javascript asp.net unix epoch momentjs


【解决方案1】:

如果您有一个日期对象,您似乎需要 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(unixTime)); // 1393552984 : 1393517104000+1000

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

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2018-08-03
    • 2020-10-19
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    相关资源
    最近更新 更多