przekonwertować datę ISO na milisekundy w javascript


87

Czy mogę przekonwertować datę ISO na milisekundy? na przykład chcę przekonwertować to iso

2012-02-10T13:19:11+0000

do milisekund.

Ponieważ chcę porównać aktualną datę z datą utworzenia. Data utworzenia to data ISO.


1
Co dokładnie masz na myśli przez „milisekundy”? Milisekundy w stosunku do którego punktu w czasie? Czy masz na myśli znacznik czasu UNIX?
Pekka,

tak jak w yahoo api, data jest pokazywana w milisekundach 1328796537, ale w fb api data jest pokazywana w iso2012-02-10T13:18:45+0000
Robin Carlo Catacutan


@mplungjan powiązane, ale nie dokładne. Chcę zobaczyć różnicę między tymi dwoma czasami.
Robin Carlo Catacutan,

Więc użyj linku, aby najpierw przetłumaczyć je na daty i zrób date1.getTime() - date2.getTime()- to wszystko, czego potrzebujesz
mplungjan

Odpowiedzi:


145

Spróbuj tego

var date = new Date("11/21/1987 16:00:00"); // some mock date
var milliseconds = date.getTime(); 
// This will return you the number of milliseconds
// elapsed from January 1, 1970 
// if your date is less than that date, the value will be negative

console.log(milliseconds);

EDYTOWAĆ

Podałeś datę ISO. Akceptuje ją również konstruktor Dateobiektu

var myDate = new Date("2012-02-10T13:19:11+0000");
var result = myDate.getTime();
console.log(result);

Edytować

Najlepsze, co znalazłem, to ręczne pozbycie się przesunięcia.

var myDate = new Date("2012-02-10T13:19:11+0000");
var offset = myDate.getTimezoneOffset() * 60 * 1000;

var withOffset = myDate.getTime();
var withoutOffset = withOffset - offset;
console.log(withOffset);
console.log(withoutOffset);

Wydaje się działać. Jeśli chodzi o problemy z konwersją ciągu ISO na Dateobiekt, możesz odwołać się do podanych linków.

EDYTOWAĆ

Naprawiono błąd z nieprawidłową konwersją na milisekundy, zgodnie z komentarzem Prasad19sara.


Tak, data nie będzie analizowana we wszystkich przeglądarkach. Zobacz moją odpowiedź na powiązane pytanie.
Vik David,

I zobacz mój komentarz do odpowiedzi pod twoją;)
mplungjan

To nie działa w przeglądarce Firefoxvar myDate = new Date("2012-02-10T13:19:11+0000");
mplungjan

1
@mplungjan, dlaczego nie używasz tego podejścia ? Wiem, że to kłopotliwe, ale i tak))
Oybek,

uh ... to robi tam wielkie „T”? Dlatego nie działa @mplungjan.
wle8300

28

Skrótem poprzednich rozwiązań jest

var myDate = +new Date("2012-02-10T13:19:11+0000");

Dokonuje konwersji typu w locie i bezpośrednio wyświetla datę w formacie milisekund.

Innym sposobem jest również użycie metody parsowania Date util, która podaje tylko czas EPOCH w milisekundach.

var myDate = Date.parse("2012-02-10T13:19:11+0000");

Masz tam małą literówkę, „+”
Stuart Siegler

@ stuart-siegler To właściwie nie jest literówka, „+” zwraca datę w milisekundach.
LordTribual

@LordTribual "+ new" zwraca datę w milisekundach?
Stuart Siegler

1
@ stuart-siegler Nie konkretnie "+ nowy", ale "+" załatwia sprawę i jest skrótem, że tak powiem. Na przykład +new Date()zwraca, 1447857230137który jest czasem w milisekundach.
LordTribual

1
O wiele jaśniej jest jawnie skonstruować obiekt JavaScript Number:, const dateMillis = Number(new Date('2017-09-26T20:24:18.801Z'))ale new Date('2017-09-26T20:24:18.801Z').getTime()lub new Date('2017-09-26T20:24:18.801Z').valueOf()jest nawet bardziej czytelny.
David G

5

Inną opcją od 2017 roku jest użycie Date.parse(). Dokumentacja MDN wskazuje jednak, że jest zawodna przed ES5.

var date = new Date(); // today's date and time in ISO format
var myDate = Date.parse(date);

Zobacz skrzypce po więcej szczegółów.


Wbudowany parser jest również zawodny po ECMAScript 2011. :-)
RobG

2

Innym możliwym rozwiązaniem jest porównać z aktualną datę January 1, 1970, można uzyskać January 1, 1970przez new Date(0);

var date = new Date(); 
var myDate= date - new Date(0);

2

Tak, możesz to zrobić w jednej linii

let ms = Date.parse('2019-05-15 07:11:10.673Z');
console.log(ms);//1557904270673

Co jest przeciwieństwem tej funkcji !?
AG1

1

Innym rozwiązaniem może być użycie parsera obiektów Number w następujący sposób:

let result = Number(new Date("2012-02-10T13:19:11+0000"));
let resultWithGetTime = (new Date("2012-02-10T13:19:11+0000")).getTime();
console.log(result);
console.log(resultWithGetTime);

To jest konwertowane na milisekundy, tak jak getTime()w przypadku Dateobiektu


0
var date = new Date()
console.log(" Date in MS last three digit = "+  date.getMilliseconds())
console.log(" MS = "+ Date.now())

Korzystając z tego, możemy uzyskać datę w milisekundach


0

var date = new Date (date_string); var milliseconds = date.getTime ();

To zadziałało dla mnie!


0

jeśli chcesz przekonwertować datę UTC na milisekundy
składnia: Date.UTC (rok, miesiąc,? dzień,? godziny,? min,? sek,? milisek);
np .:
date_in_mili = Date.UTC(2020, 07, 03, 03, 40, 40, 40);
console.log('miliseconds', date_in_mili);


0

W przypadku, gdy ktoś chce pobrać tylko czas z daty ISO, pomocne będzie poniższe. Szukałem tego i nie mogłem znaleźć odpowiedniego pytania. Więc jeśli ktoś zobaczy, będzie pomocny.

let isoDate = '2020-09-28T15:27:15+05:30';
let result = isoDate.match(/\d\d:\d\d/);
console.log(result[0]);

Dane wyjściowe będą jedynym czasem z isoDate, czyli

15:27
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.