Відмітка часу до зручного для читання формату


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/…
James Hulse

Це те саме, що я роблю
Георгевич

Я спробував це на консолі Firefox Firebug і отримав очікуваний результат. Який браузер / ОС ви використовуєте?
andrewmu

Я створив jsfiddle, і він, здається, працює нормально: jsfiddle.net/9SUqX (я тестував на Opera)
James

Відповіді:


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]

1
Ви пропонуєте допомогти з датою, але я все ще не можу зрозуміти, що не так з годинами, хвилинами та секундами
Георгевич

7
@george ти нічого не сумуєш. Ці значення є цілими числами, тому не можуть мати значення типу "00". Наприклад, ви можете легко додати йогоminute = (minute < 10 ? "0" : "") + minute;
Майстер тіней

@georgevich: в якому часовому поясі ти? Що станеться, якщо ви використовуєте date.getUTCHours()?
KooiInc

1
GMT + 2 Результат date.getUTCHours () - 19
Георгевич

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, але в різних часових поясах це може бути що завгодно. Тож додайте зміщення часового поясу до часу для створення дати GMT:

var d = new Date();
date = new Date(timestamp*1000 + d.getTimezoneOffset() * 60000)

Чому мітка часу в 1000?
Бруно Гомес,

2
@BrunoGomes він припускає, що мітка часу в секундах, тоді як javascript робить їх за мілісекунди.
Брент,

7

використовувати, Date.prototype.toLocaleTimeString()як зафіксовано тут

зверніть увагу на приклад мовної мови en-US у url.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.