Отметка времени в удобочитаемом формате

89

Ну, у меня странная проблема при преобразовании из временной метки unix в человеческое представление с использованием javascript

Вот метка времени

1301090400

Это мой javascript

var date = new Date(timestamp * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDay();
var hour    = date.getHours();
var minute  = date.getMinutes();
var seconds = date.getSeconds();  

Я ожидал результатов 2011 2, 25 22 00 00. Но сейчас 2011, 2, 6, 0, 0, 0 Чего я скучаю?

Георгиевич
источник
3
Помогает ли это: stackoverflow.com/questions/847185/…
Джеймс Халс,
То же самое, что и я,
георгиевич
Я попробовал это в консоли Firefox Firebug и получил ожидаемый результат. Какой браузер / ОС вы используете?
andrewmu
Я создал jsfiddle, и, похоже, он работает нормально: jsfiddle.net/9SUqX (я тестировал в Opera)
Джеймс Халс,
Вот что я получаю img841.imageshack.us/i/screenshot20110324at113.png
georgevich

Ответы:

101

getDay()возвращает день недели. Чтобы получить дату, используйте date.getDate(). getMonth()извлекает месяц, но месяц отсчитывается от нуля, поэтому использование getMonth()+1должно дать вам правильный месяц. Кажется, что значение времени здесь в порядке, хотя здесь час 23 (GMT + 1). Если вам нужны универсальные ценности, добавьте UTCк методам (например date.getUTCFullYear(), date.getUTCHours())

var timestamp = 1301090400,
date = new Date(timestamp * 1000),
datevalues = [
   date.getFullYear(),
   date.getMonth()+1,
   date.getDate(),
   date.getHours(),
   date.getMinutes(),
   date.getSeconds(),
];
alert(datevalues); //=> [2011, 3, 25, 23, 0, 0]
KooiInc
источник
1
Вы предлагаете помощь с датой, но я до сих пор не могу понять, что не так с часами, минутами и секундами
георгевич
7
@george вы ничего не пропустите. Эти значения являются целыми числами, поэтому не могут иметь значение типа «00». Вы можете легко добавить его сами, напримерminute = (minute < 10 ? "0" : "") + minute;
Shadow Wizard is Ear For You
@georgevich: в каком ты часовом поясе? Что будет, если использовать date.getUTCHours()?
KooiInc
1
GMT + 2 Результат date.getUTCHours () равен 19
georgevich
GMT + 2, поэтому 22 часа по всемирному времени = 0 часов по вашему времени. Вот jsfiddle с использованием значений UTC: jsfiddle.net/EZFG9 .
KooiInc
48
var newDate = new Date();
newDate.setTime(unixtime*1000);
dateString = newDate.toUTCString();

Где unixtimeвремя, возвращаемое вашим sql db. Вот скрипка, если это поможет.

Например, используя его для текущего времени:

document.write( new Date().toUTCString() );

Шувик
источник
Я нашел этот ответ и принятый здесь ответ [* .toString ()], чтобы быть полезным: stackoverflow.com/questions/13622142/… Вот суть: gist.github.com/victoriastuart/b9fb09b890ef88755538b24b0207fece
Виктория Стюарт,
1
"unixtime is undefined"это то, что я здесь получаю
Кэти
1
Во всяком случае, это легко можно превратить в один new Date(1480966325 * 1000).toUTCString()
лайнер
9

вот ответ kooilnc с дополненными 0

function getFormattedDate() {
    var date = new Date();

    var month = date.getMonth() + 1;
    var day = date.getDate();
    var hour = date.getHours();
    var min = date.getMinutes();
    var sec = date.getSeconds();

    month = (month < 10 ? "0" : "") + month;
    day = (day < 10 ? "0" : "") + day;
    hour = (hour < 10 ? "0" : "") + hour;
    min = (min < 10 ? "0" : "") + min;
    sec = (sec < 10 ? "0" : "") + sec;

    var str = date.getFullYear() + "-" + month + "-" + day + "_" +  hour + ":" + min + ":" + sec;

    /*alert(str);*/

    return str;
}
голакеры
источник
7

Часы, минуты и секунды зависят от часового пояса вашей операционной системы. В GMT (UST) это 22:00:00, но в разных часовых поясах это может быть что угодно. Поэтому добавьте смещение часового пояса ко времени, чтобы создать дату по Гринвичу:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)
Хоссейн
источник
Почему отметка времени умножена на 1000?
Бруно Гомеш,
2
@BrunoGomes предполагает, что метка времени указывается в секундах, а javascript - за миллисекунды.
Брент,
7

используйте, Date.prototype.toLocaleTimeString()как описано здесь

обратите внимание на пример локали en-US в URL-адресе.

fight4life
источник