Функція перетворення мітки часу в людську дату в javascript


82

Як перетворити цю мітку часу 1382086394000на 2013-10-18 08:53:14використання функції у javascript? На даний момент у мене є така функція:

function cleanDate(d) {return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));}

10
Окрім усіх відповідей тут, фактичним стандартом обробки дати / часу js на даний момент є moment.js здивував, що ніхто про це не згадував
alonisser

2
@ alonisser - можливо, тому, що перетворення значення часу в Дату є тривіальним. Форматувати його теж не складно.
RobG

Відповіді:


129

Значення 1382086394000 - це, мабуть, часове значення, яке є кількістю мілісекунд з 1970-01-01T00: 00: 00Z. Ви можете використовувати його для створення об'єкта ECMAScript Date за допомогою конструктора Date :

var d = new Date(1382086394000);

Як перетворити це на щось читабе, вирішувати вам. Просто надсилаючи його на вихід, слід викликати внутрішній (і повністю залежать від реалізації) метод toString *, який зазвичай друкує еквівалентний системний час у зручній для читання формі, наприклад

Fri Oct 18 2013 18:53:14 GMT+1000 (EST) 

У ES5 є кілька інших вбудованих варіантів форматування:

і так далі. Зверніть увагу, що більшість із них залежать від реалізації і будуть різними в різних браузерах. Якщо ви хочете однаковий формат у всіх браузерах, вам потрібно відформатувати дату самостійно, наприклад:

alert(d.getDate() + '/' + (d.getMonth()+1) + '/' + d.getFullYear());

* Формат Date.prototype.toString стандартизований у ECMAScript 2018 . Можливо, пройде деякий час, перш ніж це буде повсюдно у всіх реалізаціях, але принаймні більш поширені браузери підтримують це зараз.


Існує також togmtstring (), але застарілий. Я не розумію, чому існує tolocalestring (), як у JS, у браузері все локально. Або toLocaleString відокремлює Nodejs? Якщо ви використовуєте серверний JS, а часовий пояс між клієнтом і сервером відрізняється, ви отримаєте клієнтську зону?
Тимо

1
@ timo - використання "локалі" є неправильним терміном для методу, який намагається представити формат, який відповідає уподобанням користувача щодо форматування. На жаль, він базується на мові, яка не є особливо хорошим фактором, що визначає бажаний формат. Переважно форматувати дати на основі системних уподобань щодо форматування дат, а не набагато менш конкретного мовного коду.
RobG

32

Це чудово працює. Перевірено в chromeбраузері:

var theDate = new Date(timeStamp_value * 1000);
dateString = theDate.toGMTString();
alert(dateString );

8
toGMTString () застаріло, натомість використовуйте toISOString () або toUTCString ()
Ніколас Леуччі

Застереження * - *: не помножуйте на1000 . В іншому випадку, ви зациклитесь у майбутньому космосі !!
vrintle

2
після множення 1586855504 на 1000 я отримав правильний результат, інакше він забезпечував 1970 рік
Вовчиця

множення на 1000 залежить від того, в якій
меті



13

Ось найпростіші способи переплутування кожного формату дати:

на поточну дату:

var current_date=new Date();

щоб отримати позначку часу поточної дати:

var timestamp=new Date().getTime();

щоб перетворити певну дату в позначку часу:

var timestamp_formation=new Date('mm/dd/yyyy').getTime();

щоб перетворити мітку часу в дату:

    var timestamp=new Date('02/10/2016').getTime();
    var todate=new Date(timestamp).getDate();
    var tomonth=new Date(timestamp).getMonth()+1;
    var toyear=new Date(timestamp).getFullYear();
    var original_date=tomonth+'/'+todate+'/'+toyear;

  OUTPUT:
 02/10/2016

так @melpomene, половина коду не має значення, але я писав це, щоб усунути подальші сумніви щодо формування дати .. !!! і ще одну річ, я ніде не скопіював його. Я спробував це у своєму власному коді і 2 дні тому працював над цим
Троян

1
Неважливо, скопіювали ви його буквально чи ні. Справа в тому, що вся інформація вже є в іншій відповіді. До речі, ваш останній приклад насправді не дає результату, про який ви стверджуєте.
melpomene

показаний вихід насправді не відповідає виводу коду (10.02.2016)
Суяш Міттал

9

нам потрібно створити нову функцію за допомогою JavaScript.

function unixTime(unixtime) {

    var u = new Date(unixtime*1000);

      return u.getUTCFullYear() +
        '-' + ('0' + u.getUTCMonth()).slice(-2) +
        '-' + ('0' + u.getUTCDate()).slice(-2) + 
        ' ' + ('0' + u.getUTCHours()).slice(-2) +
        ':' + ('0' + u.getUTCMinutes()).slice(-2) +
        ':' + ('0' + u.getUTCSeconds()).slice(-2) +
        '.' + (u.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) 
    };

console.log(unixTime(1370001284))

2016-04-30 08:36:26.000

3

formatDate - це функція, яку ви можете викликати і передати дату, яку потрібно відформатувати dd/mm/yyyy

var unformatedDate = new Date("2017-08-10 18:30:00");
 
$("#hello").append(formatDate(unformatedDate));
function formatDate(nowDate) {
	return nowDate.getDate() +"/"+ (nowDate.getMonth() + 1) + '/'+ nowDate.getFullYear();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="hello">


</div>


2

Це те, що я зробив для API Instagram. перетворена мітка часу з методом дати, помноживши на 1000., а потім додавши всі сутності окремо, наприклад (рік, місяці тощо)

створив спеціальну назву списку місяців і зіставив getMonth()метод, який повертає індекс місяця.

convertStampDate(unixtimestamp){

// Unixtimestamp

// Months array
var months_arr = ['January','February','March','April','May','June','July','August','September','October','November','December'];

// Convert timestamp to milliseconds
var date = new Date(unixtimestamp*1000);

// Year
var year = date.getFullYear();

// Month
var month = months_arr[date.getMonth()];

// Day
var day = date.getDate();

// Hours
var hours = date.getHours();

// Minutes
var minutes = "0" + date.getMinutes();

// Seconds
var seconds = "0" + date.getSeconds();

// Display date time in MM-dd-yyyy h:m:s format
var fulldate = month+' '+day+'-'+year+' '+hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

// filtered fate
var convdataTime = month+' '+day;
return convdataTime;
}

Дзвінок із аргументом штампа convertStampDate('1382086394000')

і це все.


1

Мій варіант ES6 видає такий рядок 2020-04-05_16:39:45.85725. Не соромтеся змінювати оператор return, щоб отримати потрібний формат:

const getDateStringServ = timestamp => {

  const plus0 = num => `0${num.toString()}`.slice(-2)

  const d = new Date(timestamp)

  const year = d.getFullYear()
  const monthTmp = d.getMonth() + 1
  const month = plus0(monthTmp)
  const date = plus0(d.getDate())
  const hour = plus0(d.getHours())
  const minute = plus0(d.getMinutes())
  const second = plus0(d.getSeconds())
  const rest = timestamp.toString().slice(-5)

  return `${year}-${month}-${date}_${hour}:${minute}:${second}.${rest}`
}

-2

Для обчислення дати в мітці часу з даної дати

// Щоб отримати дату мітки часу із звичайної дати : У форматі - 1560105000000

// дата введення може бути у форматі: "2019-06-09T18: 30: 00.000Z"

this.calculateDateInTimestamp = function (inputDate) {
    var date = new Date(inputDate);
    return date.getTime();
}

вихід : 1560018600000

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