Як конвертувати дату в мітку часу?


165

Я хочу перетворити дату в часову позначку, моє введення 26-02-2012. я використав

new Date(myDate).getTime();

Це говорить NaN .. Чи може хтось розповісти, як це перетворити?



ви можете заглянути в бібліотеку date.js
rsbarro

1
Ви використовували Date(myDate).getTime()(що ви позначили як код), або слово "новий" перед ним означало, що воно є частиною коду? Чим більше зусиль ви докладете, тим кращі відповіді ви отримаєте.
TJ Crowder

@rsbarro: За винятком того, що він більше не підтримується (і є видатні помилки). MomentJS здається досить непоганим.
TJ Crowder

@TJCrowder Я використовував date.js, і він працював на те, що мені потрібно, але ви праві, що над цим не працювали активно протягом певного часу. Я перевірю моменти. Дякую!
rsbarro

Відповіді:


203
var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+","+myDate[0]+","+myDate[2];
console.log(new Date(newDate).getTime());​

Оновлення:

var myDate = "26-02-2012";
myDate = myDate.split("-");
var newDate = myDate[1]+"/"+myDate[0]+"/"+myDate[2];
console.log(new Date(newDate).getTime());

DEMO (випробувано в Chrome, FF, Opera, IE та Safari).


На жаль, це не працює в Safari5, оскільки повертається NaN. У Safari ви повинні використовувати інший можливий конструктор new Date(year, month, day);стосовно цього прикладу:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere

13
Замість того, щоб перетворювати рядок дат з "європейського" в "американський" формат, краще перетворити його у формат ISO 8601 ( YYYY-MM-DD), який гарантовано зрозумілий Date()і є, загалом кажучи, найбільш взаємодіючим форматом для рядків дат.
Вальтер Трос

3
Примітка: new Date(newDate).getTime()видасть часову позначку в мілісекундній роздільній здатності.
h7r

3
Для секунд використовуйте: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

Спробуйте цю функцію, вона використовує метод Date.parse () і не потребує спеціальної логіки:

function toTimestamp(strDate){
   var datum = Date.parse(strDate);
   return datum/1000;
}
alert(toTimestamp('02/13/2009 23:31:30'));


24

цей оновлений код зробить це

let toTimestamp = strDate => Date.parse(strDate)

це працює у всіх сучасних браузерах, крім ie8-


10

Тут є дві проблеми. По-перше, ви можете зателефонувати getTime лише за екземпляром дати. Вам потрібно загорнути нову дату в дужки або призначити її змінній.

По-друге, вам потрібно передати його рядок у відповідному форматі.

Робочий приклад:

(new Date("2012-02-26")).getTime();

1
Немає необхідності вказувати миттєву дату в дужку. Необхідний лише правильний формат рядків.
maswerdna

5

Вам потрібно просто змінити цифру дати та змінити -на ,:

 new Date(2012,01,26).getTime(); // 02 becomes 01 because getMonth() method returns the month (from 0 to 11)

У вашому випадку:

 var myDate="26-02-2012";
 myDate=myDate.split("-");
 new Date(parseInt(myDate[2], 10), parseInt(myDate[1], 10) - 1 , parseInt(myDate[0]), 10).getTime();

Місцезнаходження PS UK тут не має значення.


Цей формат дати також недійсний, і він не працюватиме надійно крос-браузером та крос-локалом (наприклад, це не стосується мене в Chrome із місцем Великобританії). Якщо ви збираєтесь запропонувати формат, запропонуйте той, який фактично документований для роботи.
TJ Crowder

Я отримую приклад від developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Я просто забув відкласти струну. Зараз це працює.
antonjs

2
Гаразд, принаймні зараз у наведеному вище коді не використовується недійсний формат дати - це просто вказати неправильну дату з двох окремих причин. Вище ви визначили дату 2 березня 2014 р. (У вас порядок роботи в полі зіпсований). І якби поля були в правильному порядку, ви б визначали дату 26 березня 2012 року (місячні значення починаються з нуля). Але оскільки в ОП є рядок, а не ряд чисел, це не все так корисно, навіть якщо ви вирішили ці проблеми.
TJ Crowder

@TJ Crowder дякую за ваші пропозиції. Я зафіксував код, як ви сказали, перетворюючи рядок у число. Мерсі.
antonjs

2
Перший приклад коду все ще помиляється , а використання Numberна рядках, починаючи з а, 0є проблематичним для деяких двигунів - використовуйте parseIntта вкажіть радіус.
TJ Crowder

5
function getTimeStamp() {
       var now = new Date();
       return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':'
                     + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now
                     .getSeconds()) : (now.getSeconds())));
}

4

Щоб перетворити дату (ISO) в часову позначку Unix , я закінчила тимчасовою міткою на 3 символи довше, ніж потрібно, так що мій рік був десь 50k ...

Мені довелося розділити його на 1000: new Date('2012-02-26').getTime() / 1000


3

Для тих, хто хоче мати читану часову позначку у форматі, yyyymmddHHMMSS

> (new Date()).toISOString().replace(/[^\d]/g,'')              // "20190220044724404"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -3) // "20190220044724"
> (new Date()).toISOString().replace(/[^\d]/g,'').slice(0, -9) // "20190220"

Приклад використання: розширення файлу резервної копії. /my/path/my.file.js.20190220


3

Якщо ви прийшли сюди, шукаючи поточну мітку часу

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

TLDR:

new Date().getTime();
//console.log(new Date().getTime());

2

Ваша рядок не у форматі, для якого визначений Dateоб'єкт для обробки . Вам доведеться самостійно проаналізувати, використати бібліотеку для розбору дат, як MomentJS або старішу (і на даний момент не підтримується, наскільки я можу сказати) DateJS , або помасажувати її у потрібному форматі (наприклад, 2012-02-29) перед запитомDate її розібрати .

Чому ви отримуєте NaN: Коли ви запитуєте new Date(...)обробляти недійсну рядок, він повертає Dateоб'єкт, встановлений на недійсну дату ( new Date("29-02-2012").toString()повертається "Invalid date"). Виклик getTime()об'єкта дати в цьому стані повертається NaN.


@benvds: Класно, дякую. Хоча я вважаю, що коментар "Крім того, він не є руйнівним для DOM" трохи дивним ... Я думаю, що вони мали на увазі те, що він не змінює Dateоб'єкт (що не має нічого спільного з DOM).
TJ Crowder

2
/**
 * Date to timestamp
 * @param  string template
 * @param  string date
 * @return string
 * @example         datetotime("d-m-Y", "26-02-2012") return 1330207200000
 */
function datetotime(template, date){
    date = date.split( template[1] );
    template = template.split( template[1] );
    date = date[ template.indexOf('m') ]
        + "/" + date[ template.indexOf('d') ]
        + "/" + date[ template.indexOf('Y') ];

    return (new Date(date).getTime());
}

0

Відповіді були надані іншими розробниками, але по-своєму, ви можете це зробити на ходу, не створюючи жодної визначеної користувачем функції, як описано нижче:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.