2013-04-14 45 views
0

我有以下的數組:For循環以JavaScript轉換倍

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到localtime的時間稍微調整之外,輸出應該看起來與輸入一致。

+0

什麼是你期望的輸出?本地時間的Unix時間戳? –

+0

@FabrícioMatté請參閱更新的問題 – David542

+0

也看看這是不是幫助[轉換UTC時代到本地日期與JavaScript](http://stackoverflow.com/questions/4631928/convert-utc-epoch-to-local- date-with-javascript) –

回答

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 
} 

由於timestamps總是從UTC計數,你不需要任何轉換。只需在您的Date objects上使用非UTC輸出方法(如getHour()而不是getUTCHour())。


雖然我不知道你會在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做回分鐘 ,而不是毫秒

+0

我在函數中返回的數組是什麼? – David542

+0

我建議不要隨時間戳改變任何東西,所以我沒有返回任何東西:-)然而,您可以將日期對象分配給數組(例如'arr [i] = date;'),並返回突變的' arr'然後。 – Bergi

+0

謝謝,請參閱更新的問題,重點在於我期待的內容。 – David542

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; 
} 
+0

時區偏移量以分鐘爲單位,而不是像毫秒時間(毫秒)。 – Bergi

+0

編輯:)現在是否正確? – JackTurky

+0

不,它更糟...... – Bergi

0

同比可能需要使用常規的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); 
+0

時區偏移量以分鐘爲單位,而不是像毫秒時間(毫秒)秒。 – Bergi

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); 
+0

它看起來就像我的,所以+1 :-) – Bergi

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     }