Làm thế nào để chuyển đổi ngày thành dấu thời gian?


165

Tôi muốn chuyển đổi ngày thành dấu thời gian, đầu vào của tôi là 26-02-2012. Tôi đã sử dụng

new Date(myDate).getTime();

Nó nói NaN .. Có ai có thể nói làm thế nào để chuyển đổi cái này không?


bản sao có thể có của stackoverflow.com/questions/9343971/
Mạnh

bạn có thể muốn xem thư viện date.js
rsbarro

1
Bạn đã sử dụng Date(myDate).getTime()(những gì bạn đã đánh dấu là mã) hay từ "mới" trước đó có nghĩa là một phần của mã? Bạn càng nỗ lực nhiều, câu trả lời bạn nhận được sẽ càng tốt.
TJ Crowder

@rsbarro: Ngoại trừ việc nó dường như không được duy trì nữa (và có những lỗi nổi bật). MomentJS có vẻ khá tốt, mặc dù.
TJ Crowder

@TJCrowder Tôi đã sử dụng date.js và nó hoạt động cho những gì tôi cần, nhưng bạn nói đúng là nó đã không được tích cực làm việc trong một thời gian. Tôi sẽ kiểm tra khoảnh khắc. Cảm ơn!
rsbarro

Câu trả lời:


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

Cập nhật:

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

DEMO (Đã thử nghiệm trong Chrome, FF, Opera, IE và Safari).


Thật không may, điều này không hoạt động trong Safari5, vì nó trở lại NaN. Trong Safari, bạn phải sử dụng hàm tạo khác có thể new Date(year, month, day);, liên quan đến ví dụ này:new Date(myDate[2], myDate[1], myDate[0]);
insertusernamehere

13
Thay vì chuyển đổi chuỗi ngày từ định dạng "Châu Âu" sang định dạng "Mỹ", tốt hơn là chuyển đổi chuỗi đó sang định dạng ISO 8601 ( YYYY-MM-DD), được đảm bảo để được hiểu bởi Date(), và nói chung, là định dạng tương thích nhất cho chuỗi ngày.
Walter Tross

3
Lưu ý: new Date(newDate).getTime()sẽ tạo dấu thời gian ở độ phân giải mili giây.
h7r

3
Trong vài giây sử dụng: Math.floor(new Date(newDate).getTime() / 1000)
metamagikum

54

Hãy thử chức năng này, nó sử dụng phương thức Date.parse () và không yêu cầu bất kỳ logic tùy chỉnh nào:

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

mã tái cấu trúc này sẽ làm điều đó

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

cái này hoạt động trên tất cả các trình duyệt hiện đại trừ eg8-


10

Có hai vấn đề ở đây. Đầu tiên, bạn chỉ có thể gọi getTime theo phiên bản của ngày. Bạn cần bọc Ngày mới trong ngoặc hoặc gán nó cho biến.

Thứ hai, bạn cần truyền cho nó một chuỗi theo định dạng thích hợp.

Ví dụ làm việc:

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

1
Không cần phải gói ngày ngay lập tức trong một khung. Chỉ cần một định dạng chuỗi thích hợp.
maswerdna

5

Bạn chỉ cần đảo ngược chữ số ngày của bạn và thay đổi -với ,:

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

Trong trường hợp của bạn:

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

Địa phương PS UK không quan trọng ở đây.


Định dạng ngày đó cũng không hợp lệ và sẽ không hoạt động đáng tin cậy giữa trình duyệt chéo và ngôn ngữ chéo (ví dụ, đối với tôi trong Chrome với miền địa phương Vương quốc Anh). Nếu bạn định đề xuất một định dạng, hãy đề xuất một định dạng thực sự được ghi lại để hoạt động.
TJ Crowder

Tôi lấy ví dụ từ developer.mozilla.org/en/JavaScript/Reference/Global_Objects/ tựa . Tôi chỉ quên để lại chuỗi. Bây giờ nó hoạt động.
antonjs

2
Được rồi, ít nhất bây giờ mã ở trên không sử dụng định dạng ngày không hợp lệ - nó chỉ đưa ra ngày sai, vì hai lý do riêng biệt. Ở trên bạn đã xác định ngày 2 tháng 3 năm 2014 (bạn có trật tự trường bị rối). Và nếu các trường theo đúng thứ tự, bạn sẽ xác định ngày 26 tháng 3 năm 2012 (giá trị tháng bắt đầu từ 0). Nhưng vì OP có một chuỗi, không phải là một dãy số, nên nó không hữu ích ngay cả khi bạn giải quyết những vấn đề đó.
TJ Crowder

@TJ Crowder cảm ơn lời đề nghị của bạn. Tôi đã sửa mã như bạn nói khi chuyển đổi Chuỗi thành Số. Merci.
antonjs

2
Ví dụ mã đầu tiên vẫn sai và việc sử dụng các Numberchuỗi bắt đầu bằng một 0vấn đề trên một số công cụ - sử dụng parseIntvà chỉ định một cơ số.
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

Để chuyển đổi ngày (ISO) sang dấu thời gian Unix , tôi đã kết thúc với dấu thời gian 3 ký tự dài hơn mức cần thiết để năm của tôi ở khoảng 50 nghìn ...

Tôi đã phải chia nó cho 1000: new Date('2012-02-26').getTime() / 1000


3

Đối với những người muốn có dấu thời gian có thể đọc được ở định dạng, 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"

Ví dụ sử dụng: một phần mở rộng tập tin sao lưu. /my/path/my.file.js.20190220


3

Trong trường hợp bạn đến đây để tìm dấu thời gian hiện tại

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

TLDR:

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

2

Chuỗi của bạn không ở định dạng mà Dateđối tượng được chỉ định để xử lý . Bạn sẽ phải tự phân tích nó, sử dụng thư viện phân tích ngày như MomentJS hoặc cũ hơn (và hiện không được duy trì, theo như tôi có thể nói) DateJS , hoặc xoa bóp nó theo định dạng chính xác (ví dụ 2012-02-29:) trước khi hỏiDate phân tích cú pháp .

Tại sao bạn nhận được NaN: Khi bạn yêu cầu new Date(...)xử lý một chuỗi không hợp lệ, nó sẽ trả về một Dateđối tượng được đặt thành ngày không hợp lệ ( new Date("29-02-2012").toString()trả về "Invalid date"). Gọi getTime()một đối tượng ngày trong trạng thái này trả về NaN.


@benvds: Tuyệt, cảm ơn. Mặc dù tôi thấy nhận xét "Ngoài ra, nó không phá hủy DOM" một chút kỳ lạ ... Tôi mong đợi điều họ muốn nói là nó không thay đổi Dateđối tượng (không liên quan gì đến 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

Câu trả lời đã được cung cấp bởi các nhà phát triển khác nhưng theo cách riêng của tôi, bạn có thể thực hiện việc này một cách nhanh chóng mà không cần tạo bất kỳ chức năng nào do người dùng xác định như sau:

var timestamp = Date.parse("26-02-2012".split('-').reverse().join('-'));
alert(timestamp); // returns 1330214400000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.