Hàm chuyển đổi dấu thời gian thành ngày tháng của con người trong javascript


82

Làm cách nào để chuyển đổi dấu thời gian này 1382086394000sang 2013-10-18 08:53:14sử dụng một hàm trong javascript? Hiện tại tôi có chức năng này:

function cleanDate(d) {return new Date(+d.replace(/\/Date\((\d+)\)\//, '$1'));}

10
Bên cạnh đó tất cả các câu trả lời ở đây, tiêu chuẩn de facto trong js ngày / giờ hiện xử lý là moment.js ngạc nhiên không ai đề cập đến nó ở đây
alonisser

2
@ alonisser — có lẽ bởi vì việc chuyển đổi giá trị thời gian thành Ngày là việc làm nhỏ. Định dạng nó cũng không đặc biệt khó khăn.
RobG

Câu trả lời:


128

Giá trị 1382086394000 có thể là giá trị thời gian, là số mili giây kể từ năm 1970-01-01T00: 00: 00Z. Bạn có thể sử dụng nó để tạo một đối tượng Ngày ECMAScript bằng cách sử dụng hàm tạo Ngày :

var d = new Date(1382086394000);

Làm thế nào bạn chuyển đổi nó thành một cái gì đó có thể đọc được là tùy thuộc vào bạn. Chỉ cần gửi nó đến đầu ra sẽ gọi phương thức toString bên trong (và hoàn toàn phụ thuộc vào việc triển khai) * thường in thời gian hệ thống tương đương ở dạng con người có thể đọc được, ví dụ:

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

Trong ES5 có một số tùy chọn định dạng cài sẵn khác:

và như thế. Lưu ý rằng hầu hết đều phụ thuộc vào việc triển khai và sẽ khác nhau trong các trình duyệt khác nhau. Nếu bạn muốn có cùng một định dạng trên tất cả các trình duyệt, bạn sẽ cần tự định dạng ngày tháng, ví dụ:

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

* Định dạng của Date.prototype.toString đã được chuẩn hóa trong ECMAScript 2018 . Có thể mất một thời gian trước khi nó phổ biến trên tất cả các triển khai, nhưng ít nhất thì hiện tại các trình duyệt phổ biến hơn đã hỗ trợ nó.


Ngoài ra còn có togmtstring (), nhưng không được dùng nữa. Tôi không hiểu tại sao lại có tolocalestring () như trong JS, mọi thứ đều là cục bộ trong trình duyệt. Hay toLocaleString là một sự tách biệt với Nodejs? Nếu bạn sử dụng JS bên máy chủ và múi giờ giữa máy khách và máy chủ khác nhau, bạn nhận được vùng máy khách?
Timo

1
@ timo — việc sử dụng "ngôn ngữ" là một cách gọi sai đối với một phương pháp cố gắng trình bày một định dạng phù hợp với sở thích định dạng của người dùng. Thật không may, nó dựa trên ngôn ngữ, không phải là yếu tố quyết định đặc biệt tốt cho định dạng ưa thích. Nên định dạng ngày dựa trên tùy chọn hệ thống để định dạng ngày hơn là mã ngôn ngữ ít cụ thể hơn nhiều.
RobG

32

Điều này hoạt động tốt. Đã kiểm tra trong chrometrình duyệt:

var theDate = new Date(timeStamp_value * 1000);
dateString = theDate.toGMTString();
alert(dateString );

8
toGMTString () không được dùng nữa, hãy sử dụng toISOString () hoặc toUTCString () để thay thế
Nicolas Leucci

Chú ý * - *: không nhân với1000 . Nếu không, bạn sẽ bay vào không gian trong tương lai !!
vrintle

2
sau khi nhân 1586855504 với 1000 tôi có kết quả đúng nếu không nó đã cung cấp 1970
Warewolf

nhân với 1000 tùy thuộc vào dấu thời gian của bạn là bao nhiêu, giây hoặc mili giây
Tejashwi Kalp Taru

27

tại sao không đơn giản

new Date (timestamp);

Ngày là một ngày tháng, việc định dạng nó là một vấn đề khác.


21

Moment.js có thể chuyển đổi dấu thời gian unix thành bất kỳ định dạng tùy chỉnh nào

Trong trường hợp này : var time = moment(1382086394000).format("DD-MM-YYYY h:mm:ss");

sẽ in 18-10-2013 11:53:14;

Đây là một plunker chứng minh điều này.


Có vẻ như điều này là quá mức cần thiết
ʎzɐɹƆ

Cảm ơn. điều này thực sự đã giúp tôi.
Akram Chauhan

13

Dưới đây là những cách đơn giản để giải quyết mọi nhầm lẫn về định dạng ngày:

cho ngày hiện tại:

var current_date=new Date();

để lấy Dấu thời gian của ngày hiện tại:

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

để chuyển một Ngày cụ thể thành Dấu thời gian:

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

để chuyển đổi dấu thời gian thành Ngày:

    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

vâng @melpomene, một nửa mã không liên quan nhưng tôi đã viết điều đó để xóa những nghi ngờ thêm về sự hình thành ngày tháng .. !!! và một điều nữa là tôi đã không sao chép nó từ bất kỳ đâu. Tôi đã thử nó trong mã của riêng tôi và 2 ngày sao tôi làm việc trên nó
Trojan

1
Không quan trọng bạn có sao chép nó theo nghĩa đen hay không. Vấn đề là tất cả thông tin đã có trong một câu trả lời khác. Nhân tiện, ví dụ cuối cùng của bạn không thực sự tạo ra kết quả như bạn khẳng định.
melpomene

đầu ra hiển thị không thực sự khớp với đầu ra mã (2/10/2016)
Suyash Mittal

9

chúng ta cần tạo hàm mới bằng 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

3

formatDate là hàm bạn có thể gọi nó và chuyển ngày bạn muốn định dạng 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>


2

Đây là những gì tôi đã làm cho API instagram. đã chuyển đổi dấu thời gian với phương pháp ngày bằng cách nhân với 1000. và sau đó thêm tất cả các thực thể riêng lẻ như (năm, tháng, v.v.)

đã tạo tên danh sách tháng tùy chỉnh và được ánh xạ với getMonth()phương thức trả về chỉ mục của tháng.

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

Gọi với đối số tem convertStampDate('1382086394000')

và đó là nó.


1

Biến thể ES6 của tôi tạo ra một chuỗi như thế này 2020-04-05_16:39:45.85725. Vui lòng sửa đổi câu lệnh trả về để có được định dạng mà bạn cần:

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

-1

Để tính ngày trong dấu thời gian từ ngày nhất định

// Để lấy ngày dấu thời gian từ ngày bình thường : Ở định dạng - 1560105000000

// ngày nhập có thể ở định dạng: "2019-06-09T18: 30: 00.000Z"

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

sản lượng : 1560018600000

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.