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

83

Как преобразовать эту метку времени 1382086394000в 2013-10-18 08:53:14использование функции в javascript? В настоящее время у меня есть такая функция:

function cleanDate(d) {return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));}
Вилли Муларто
источник
10
Помимо всех ответов здесь, стандартом де-факто в обработке даты и времени js в настоящее время является moment.js удивил, что никто не упомянул об этом здесь
alonisser 08
2
@ alonisser - возможно, потому что преобразование значения времени в Date тривиально. Форматировать его тоже не составляет особого труда.
RobG

Ответы:

130

Значение 1382086394000 , вероятно, является значением времени, которое представляет собой количество миллисекунд, прошедших с 1970-01-01T00: 00: 00Z. Вы можете использовать его для создания объекта даты ECMAScript с помощью конструктора 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 и часовой пояс между клиентом и сервером отличается, вы получаете клиентскую зону?
Timo
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 я получил правильный результат, иначе он
давал
умножение на 1000 зависит от вашей временной метки в секундах или миллисекундах
Теджашви Калп Тару,
27

почему бы просто не

new Date (timestamp);

Дата - это дата, форматирование - другое дело.

Страшный вомбат
источник
21

Moment.js может конвертировать временные метки unix в любой пользовательский формат

В этом случае : var time = moment(1382086394000).format("DD-MM-YYYY h:mm:ss");

распечатает 18-10-2013 11:53:14;

Вот плункер, который это демонстрирует.

сварог
источник
Похоже, это перебор
ʎzɐɹƆ
Благодарю. это действительно помогло мне.
Акрам Чаухан
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 дня назад я работал над этим
Trojan
1
Неважно, скопировали вы это буквально или нет. Дело в том, что вся информация уже есть в другом ответе. Между прочим, ваш последний пример на самом деле не дает того результата, о котором вы заявляете.
melpomene
Показанный результат на самом деле не соответствует выходному коду (10
февраля 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

Атар
источник