JavaScript unixtime проблема - PullRequest
       7

JavaScript unixtime проблема

0 голосов
/ 21 марта 2011

Я получаю время из базы данных в формате Unix.

Это выглядит так: console.log (time);Результат: 1300709088000

Теперь я хочу переформатировать его и выбрать только время, я нашел это: Преобразование метки времени Unix в время в JavaScript

Это не сработалокак я хочу.Время, которое я получаю, таково:

1300709088000
9:0:0

1300709252000
6:33:20

1300709316000
0:20:0

1300709358000
12:0:0

1300709530000
11:46:40

Это очень неправильные времена, когда я знаю, что времена совсем другие.Как я могу это исправить?

    console.log(time);

var date = new Date(time*1000);
// hours part from the timestamp
var hours = date.getHours();
// minutes part from the timestamp
var minutes = date.getMinutes();
// seconds part from the timestamp
var seconds = date.getSeconds();

// will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes + ':' + seconds;
console.log(formattedTime);

Ответы [ 3 ]

3 голосов
/ 21 марта 2011

Это выглядит так: console.log (time); Результат: 1300709088000

Это не похоже на метку времени Unix (секунды с начала эпохи), оно выглядит как миллисекунды с начала эпохи. Таким образом, вы не умножили бы на 1000, чтобы преобразовать секунды в миллисекунды для JavaScript, это уже в миллисекундах (или вы имеете дело с датами более чем через 41 000 лет; это вполне справедливо).

Тест:

var times = [
    1300709088000,
    1300709252000,
    1300709316000,
    1300709358000,
    1300709530000
  ];
var index;

for (index = 0; index < times.length; ++index) {
    display(times[index] + " => " + new Date(times[index]));
}

Живая копия


Обновление : Или получение отдельных частей:

var times = [
    1300709088000,
    1300709252000,
    1300709316000,
    1300709358000,
    1300709530000
  ];
var index, dt;

for (index = 0; index < times.length; ++index) {
    dt = new Date(times[index]);
    display(times[index] +
            " => " +
            dt +
            " (" + formatISOLikeDate(dt) + ")");
}

// Not all implementations have ISO-8601 stuff yet, do it manually
function formatISOLikeDate(dt) {
    var day    = String(dt.getDate()),
        month  = String(dt.getMonth() + 1), // Starts at 0
        year   = String(dt.getFullYear()),
        hour   = String(dt.getHours()),
        minute = String(dt.getMinutes()),
        second = String(dt.getSeconds());

    return zeroPad(year, 4) + "-" +
           zeroPad(month, 2) + "-" +
           zeroPad(day, 2) + " " +
           zeroPad(hour, 2) + ":" +
           zeroPad(minute, 2) + ":" +
           zeroPad(second, 2);
}
function zeroPad(str, width) {
    while (str.length < width) {
        str = "0" + str;
    }
    return str;
}

Живая копия ... но если вы собираетесь что-то делать с датами, я бы посмотрел на DateJS .

1 голос
/ 21 марта 2011

Ваши метки времени не в формате Unix, они уже в формате разрешения Javascript миллисекунда .

Следовательно, вы не должны умножаться на 1000когда вы создаете Date объект.

0 голосов
/ 21 марта 2011

Я пытался сделать что-то вроде этого:

console.log (время);

 where date = new Date (time);
 / / hours party from the timestamp
 was hours = date.getHours ();
 / / party minutes from the timestamp
 Every minute = date.getMinutes ();
 / / Seconds Party From The timestamp
 where seconds = date.getSeconds ();

 / / Will display time up 10:30:23 format
 was formattedTime = hours + ':' + minutes + ':' + seconds;
 console.log (formattedTime);

Результат таков: 1300709088000 NaN: NaN: NaN

...