0

次の配列があります。

1366004070000,1,1366004406000,1

1 番目と 3 番目のエントリは 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 への時間のわずかな調整を除いて、出力は入力と同一に見えるはずです。

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

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 に答える
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 からカウントされるため、何も変換する必要はありません。オブジェクトに対して、 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 に答える