0

我有以下数组:

1366004070000,1,1366004406000,1

第一个和第三个条目是一个 unix 时间戳。我需要将其转换为本地日期时间。我将如何创建一个函数来执行此操作:

这是我到目前为止的非功能结构:

function toLocalTime(data) {
    for (unixTime, successful in data) {
        var d = new Date();
        var tzOffset = d.getTimezoneOffset();
        var new_time = unixTime - tzOffset
    ??
   };
   return newArray
}

我想生成一个与上述结构相同的数组,但时间戳转换为本地时间,例如:

1366004070444,1,1366004406444,1

更新:以下答案中没有一个以我正在寻找的格式获取数据。我不是在寻找当地时间对象。我正在寻找一个给我“调整后的 unix 时间戳”的数组。换句话说,输出应该看起来与输入相同,除了从UTC到本地时间的轻微调整。

4

5 回答 5

1

您要求将数组时间转换为当地时间 - 所以这是正确答案(其余答案与今天比较)

http://jsfiddle.net/vWKYW/

var times = [1366004070000,1,1366004406000,1];
var local_times = [];
for(var i=0;i<times.length;i++){
     var time = times[i];
    if(time != 1){
        var d = new Date(time);
        var tz = d.getTimezoneOffset();        
        var tz_ms = tz*60*1000;
        time = d.getTime() - tz_ms;
    }

    local_times.push(time);
}

console.log(local_times);
于 2013-04-15T00:18:36.440 回答
0

这是有效的:

for(var i=0; i<data.length; i++) {
 29         var d = new Date(parseInt(data[i][0]));
 30         var tz = d.getTimezoneOffset();
 31         var ms = tz * 60 * 1000;
 32         data[i][0] = d.getTime() - ms;
 33         //console.log(data[i][0]);
 34     }
于 2013-04-15T04:22:44.173 回答
0

看起来你想要这个:

var arr = [1366004070000,1,1366004406000,1];
for (var i=0; i<arr.length; i+=2) {
    var unixTime = arr[i],
        successful = arr[i+1];

    var date = new Date(unixTime);
    console.log(date.toString());  // local: Mon Apr 15 2013 07:34:30 GMT+0200
    console.log(date.toUTCString()); // UTC: Mon, 15 Apr 2013 05:34:30 GMT
}

由于时间戳始终从 UTC 开始计算,因此您无需进行任何转换。只需在您的objects上使用非 UTC 输出方法(如getHour()代替) 。getUTCHour()Date


虽然我看不到你会用 JavaScript 中的“本地时区调整时间戳”做什么,但这将是创建它们的代码:

function toLocalTime(data) {
    var newArray = [];
    for (var i=0; i<data.length; i+=2) {
        var unixTime = data[i];
        var d = new Date(data[i]);
        var tzOffset = d.getTimezoneOffset() * 6e4;
        newArray[i] = unixTime - tzOffset;
        newArray[i+1] = data[i+1];
   }
   return newArray;
}

getTimezoneOffset确实返回分钟,而不是毫秒

于 2013-04-14T23:58:59.563 回答
0

如果我理解正确(我不认为)你需要的是:

function toLocalTime(data) {
    data[0]  = getLocalTime(data[0]);
    data[2]  = getLocalTime(data[2]);
    return data;
   };
}

function getLocalTime(unixTime){
   var d = new Date();
   var tzOffset = d.getTimezoneOffset()*60000; // As @Bergi suggest :) 
   return unixTime - tzOffset;
}
于 2013-04-14T23:59:42.540 回答
0

Yoy 可能想改用常规的 for 循环:

var unixTimes = [1366004070000,1,1366004406000,1];

function toLocalTime(data) {
    var localTimes = [];
    for (var i = 0; i < data.length; i++) {
        var d = new Date();
        var tzOffset = d.getTimezoneOffset() * 60 * 1000; //To convert to ms
        var new_time = data[i] - tzOffset;
        localTimes.push(new_time);
   };
   return localTimes;
}

var newTimes = toLocalTime(unixTimes);
于 2013-04-15T00:04:38.683 回答