Как конвертировать дату в метку времени?

165

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

new Date(myDate).getTime();

Это говорит NaN .. Кто-нибудь может сказать, как преобразовать это?

selladurai
источник
возможный дубликат stackoverflow.com/questions/9343971/… ..
Богдан Эмиль Мариесан
Вы можете взглянуть на библиотеку 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());

ДЕМО (протестировано в Chrome, FF, Opera, IE и Safari).

Альфа
источник
К сожалению, в Safari5 это не работает, так как возвращается NaN. В Safari вы должны использовать другой возможный конструктор new Date(year, month, day);, относящийся к этому примеру:new Date(myDate[2], myDate[1], myDate[0]);
insertusername здесь
13
Вместо преобразования строки даты из «европейского» в «американский» формат лучше преобразовать ее в формат ISO 8601 ( YYYY-MM-DD), который гарантированно понимается Date()и, вообще говоря, является наиболее совместимым форматом для строк даты.
Уолтер Тросс
3
Примечание: new Date(newDate).getTime()создаст временную метку в миллисекундах.
h7r 22.12.14
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'));
Кетан Савалия
источник
25
var dtstr = "26-02-2012";
new Date(dtstr.split("-").reverse().join("-")).getTime();
диод
источник
24

этот переработанный код сделает это

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

это работает во всех современных браузерах, кроме ie8-

Jalasem
источник
10

Здесь есть две проблемы. Во-первых, вы можете вызывать getTime только для экземпляра даты. Вам нужно заключить новую дату в скобки или присвоить ее переменной.

Во-вторых, вам нужно передать строку в правильном формате.

Рабочий пример:

(new Date("2012-02-26")).getTime();
Алан Богу
источник
1
Нет необходимости заключать дату в скобки. Требуется только правильный формат строки.
масвердна
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 Локализация в Великобритании здесь не имеет значения.

antonjs
источник
Этот формат даты также недопустим и не будет надежно работать в разных браузерах и кросс-локалях (например, в Chrome с английским языком не подходит). Если вы собираетесь предложить формат, предложите тот, который действительно задокументирован для работы.
TJ Crowder
Я получил пример с developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . Я просто забыл убрать строку. Теперь это работает.
antonjs
2
Хорошо, по крайней мере, теперь приведенный выше код не использует недопустимый формат даты - он просто дает неправильную дату по двум отдельным причинам. Выше вы определили дату 2 марта 2014 года (у вас неправильный порядок полей). И если поля были в правильном порядке, вы бы определение даты марта 26 - го, 2012 (месяц значения начинаются с нуля). Но так как в OP есть строка, а не последовательность чисел, это не так уж и полезно, даже если вы решили эти проблемы.
TJ Crowder
@TJ Crowder спасибо за ваши предложения. Я исправил код, как вы сказали, преобразовав строку в число. Merci.
antonjs
2
Первый пример кода все еще не верен , и использование Numberстрок, начинающихся с a 0, проблематично на некоторых движках - используйте parseIntи укажите radix.
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())));
}
deepakssn
источник
4

Чтобы преобразовать дату (ISO) в метку времени Unix , у меня была метка времени на 3 символа длиннее, чем нужно, поэтому мой год был где-то около 50 тыс.

Я должен был разделить это на 1000: new Date('2012-02-26').getTime() / 1000

orszaczky
источник
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

allenhwkim
источник
3

Если вы пришли сюда в поисках текущей метки времени

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

TLDR:

new Date().getTime();
//console.log(new Date().getTime());
TimeTrax
источник
2

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

Почему вы получаете NaN: Когда вы просите new Date(...)обработать недопустимую строку, он возвращает Dateобъект, который имеет недопустимую дату ( new Date("29-02-2012").toString()возвращает "Invalid date"). Вызов getTime()объекта даты в этом состоянии возвращается NaN.

TJ Crowder
источник
@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
Фредерик Эз
источник