Funkcja do konwersji znacznika czasu na datę ludzką w javascript

83

Jak przekonwertować ten znacznik czasu 1382086394000na 2013-10-18 08:53:14użycie funkcji w javascript? Obecnie mam taką funkcję:

function cleanDate(d) {return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));}
Willy Mularto
źródło
10
Oprócz wszystkich odpowiedzi tutaj, de facto standardem obsługi daty / czasu js jest obecnie moment.js zaskoczył, że nikt o tym nie wspomniał
alonisser
2
@ alonisser - być może dlatego, że konwersja wartości czasu na datę jest banalna. Sformatowanie też nie jest szczególnie trudne.
RobG,

Odpowiedzi:

130

Wartość 1382086394000 jest prawdopodobnie wartością czasu, czyli liczbą milisekund od 1970-01-01T00: 00: 00Z. Możesz go użyć do utworzenia obiektu Date ECMAScript przy użyciu konstruktora Date :

var d = new Date(1382086394000);

To, jak przekonwertujesz to na coś czytelnego, zależy od Ciebie. Po prostu wysłanie go na wyjście powinno wywołać wewnętrzną (i całkowicie zależną od implementacji) metodę toString *, która zwykle wyświetla równoważny czas systemowy w postaci czytelnej dla człowieka, np.

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

W ES5 jest kilka innych wbudowanych opcji formatowania:

i tak dalej. Należy pamiętać, że większość z nich zależy od implementacji i będzie się różnić w różnych przeglądarkach. Jeśli chcesz mieć ten sam format we wszystkich przeglądarkach, musisz samodzielnie sformatować datę, np .:

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

* Format Date.prototype.toString został ustandaryzowany w ECMAScript 2018 . Może minąć trochę czasu, zanim stanie się wszechobecny we wszystkich implementacjach, ale przynajmniej najpopularniejsze przeglądarki obsługują go teraz.

RobG
źródło
Istnieje również togmtstring (), ale jest przestarzały. Nie rozumiem, dlaczego jest tolocalestring () jak w JS, wszystko jest lokalne w przeglądarce. A może toLocaleString jest separacją do Nodejs? Jeśli używasz JS po stronie serwera, a strefa czasowa między klientem a serwerem jest inna, otrzymujesz strefę klienta?
Timo
1
@ timo - użycie „locale” jest błędną nazwą dla metody, która próbuje przedstawić format zgodny z preferencjami użytkownika dotyczącymi formatowania. Niestety opiera się na języku, który nie jest szczególnie dobrym wyznacznikiem preferowanego formatu. Lepiej byłoby formatować daty w oparciu o preferencje systemowe dotyczące formatowania daty, a nie na znacznie mniej szczegółowym kodzie języka.
RobG
32

To działa dobrze. Sprawdzone w chromeprzeglądarce:

var theDate = new Date(timeStamp_value * 1000);
dateString = theDate.toGMTString();
alert(dateString );
Optimus Krish
źródło
8
ToGMTString () jest przestarzałe, zamiast tego użyj toISOString () lub toUTCString ()
Nicolas Leucci
Uwaga * - *: nie mnożyć przez1000 . W przeciwnym razie przeniesiesz się w przyszłą przestrzeń !!
vrintle
2
po pomnożeniu 1586855504 przez 1000 uzyskałem poprawny wynik, w przeciwnym razie
podawał
mnożenie przez 1000 zależy od tego, jaki jest twój znacznik czasu, w sekundach lub milisekundach
Tejashwi Kalp Taru
27

dlaczego nie po prostu

new Date (timestamp);

Data to data, a jej formatowanie to inna sprawa.

Straszny wombat
źródło
21

Moment.js może konwertować znaczniki czasu unixa do dowolnego formatu niestandardowego

W tym przypadku : var time = moment(1382086394000).format("DD-MM-YYYY h:mm:ss");

wydrukuje 18-10-2013 11:53:14;

Oto plunker, który to demonstruje.

svarog
źródło
Wygląda na to, że to przesada
ʎzɐɹƆ
Dzięki. to naprawdę mi pomogło.
Akram Chauhan
13

Oto proste sposoby na wszelkie pomyłki w formacie daty:

na bieżącą datę:

var current_date=new Date();

aby uzyskać znacznik czasu aktualnej daty:

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

aby przekonwertować określoną datę na znacznik czasu:

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

aby przekonwertować znacznik czasu na datę:

    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
trojański
źródło
tak @melpomene, połowa kodu jest nieistotna, ale napisałem to, aby wyjaśnić dalsze wątpliwości dotyczące tworzenia dat .. !!! i jeszcze jedno, nie skopiowałem go skądkolwiek. Wypróbowałem to we własnym kodzie i 2 dni temu pracowałem nad tym
Trojan
1
Nie ma znaczenia, czy skopiowałeś go dosłownie, czy nie. Chodzi o to, że wszystkie informacje są już zawarte w innej odpowiedzi. Nawiasem mówiąc, twój ostatni przykład tak naprawdę nie daje rezultatów, które według ciebie robią.
melpomene
Pokazane dane wyjściowe w rzeczywistości nie są zgodne z kodem wyjściowym (10.02.2016)
Suyash Mittal,
9

musimy stworzyć nową funkcję za pomocą 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
KARTHIKEYAN.A
źródło
3

formatDate to funkcja, którą możesz wywołać i przekazać datę, do której chcesz sformatować 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>

Czarna Mamba
źródło
2

Oto, co zrobiłem dla API instagramu. przekonwertowany znacznik czasu metodą daty przez pomnożenie przez 1000, a następnie dodanie wszystkich jednostek indywidualnie, takich jak (rok, miesiące itp.)

utworzył niestandardową nazwę listy miesięcy i zmapował go getMonth()metodą, która zwraca indeks miesiąca.

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;
}

Zadzwoń z argumentem pieczęci convertStampDate('1382086394000')

i to wszystko.

Hidayt Rahman
źródło
1

Mój wariant ES6 tworzy taki łańcuch 2020-04-05_16:39:45.85725. Możesz zmodyfikować instrukcję zwrotu, aby uzyskać wymagany format:

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}`
}
rzymski
źródło
-2

Aby obliczyć datę w znaczniku czasu z podanej daty

// Aby uzyskać datę znacznika czasu z normalnej daty : W formacie - 1560105000000

// data wprowadzenia może mieć format: „2019-06-09T18: 30: 00.000Z”

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

wyjście : 1560018600000

Athar
źródło