Định dạng thời gian hiện tại bằng Javascript


101

Tôi muốn lấy thời gian hiện tại ở định dạng cụ thể bằng javascript.

Với chức năng bên dưới và gọi nó sẽ cho tôi thứ Sáu, ngày 01 tháng 2 năm 2013 13:56:40 GMT + 1300 (Giờ ban ngày của New Zealand) nhưng tôi muốn định dạng nó giống như Thứ Sáu 2:00 chiều ngày 1 tháng 2 năm 2013

var d = new Date();
var x = document.getElementById("time");
x.innerHTML = d;

Tất nhiên, đoạn mã ở trên không có bất kỳ logic định dạng nào nhưng tôi chưa tìm thấy bất kỳ bộ định dạng "hoạt động" nào.


Đối với một câu hỏi tương tự cho Node.js thấy stackoverflow.com/questions/10645994/...
Ohad Schneider

Câu trả lời:


160

JavaScript Date có một số phương pháp cho phép bạn trích xuất các phần của nó:

getFullYear()- Trả về năm gồm 4 chữ số
getMonth()- Trả về số nguyên dựa trên 0 (0-11) đại diện cho tháng trong năm.
getDate()- Trả về ngày trong tháng (1-31).
getDay()- Trả về ngày trong tuần (0-6). 0 là chủ nhật, 6 là thứ bảy.
getHours()- Trả về giờ trong ngày (0-23).
getMinutes()- Trả về phút (0-59).
getSeconds()- Trả về thứ hai (0-59).
getMilliseconds()- Trả về mili giây (0-999).
getTimezoneOffset()- Trả về số phút giữa giờ địa phương của máy và UTC.

Không có phương thức tích hợp nào cho phép bạn lấy các chuỗi được bản địa hóa như "Thứ Sáu", "Tháng Hai" hoặc "Chiều". Bạn phải tự mình viết mã đó. Để có được chuỗi bạn muốn, ít nhất bạn cần lưu trữ chuỗi biểu diễn ngày và tháng:

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];

Sau đó, kết hợp nó với nhau bằng các phương pháp ở trên:

var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var d = new Date();
var day = days[d.getDay()];
var hr = d.getHours();
var min = d.getMinutes();
if (min < 10) {
    min = "0" + min;
}
var ampm = "am";
if( hr > 12 ) {
    hr -= 12;
    ampm = "pm";
}
var date = d.getDate();
var month = months[d.getMonth()];
var year = d.getFullYear();
var x = document.getElementById("time");
x.innerHTML = day + " " + hr + ":" + min + ampm + " " + date + " " + month + " " + year;
<span id="time"></span>

Tôi có một chức năng định dạng ngày tháng mà tôi muốn đưa vào thư viện chuẩn của mình. Nó nhận một tham số chuỗi định dạng xác định đầu ra mong muốn. Các chuỗi định dạng được lỏng lẻo dựa trên Net ngày tùy chỉnh và định dạng chuỗi Time . Đối với các định dạng mà bạn chỉ định chuỗi định dạng sau sẽ làm việc: "dddd h:mmtt d MMM yyyy".

var d = new Date();
var x = document.getElementById("time");
x.innerHTML = formatDate(d, "dddd h:mmtt d MMM yyyy");

Demo: jsfiddle.net/BNkkB/1

Đây là chức năng định dạng ngày đầy đủ của tôi:

function formatDate(date, format, utc) {
    var MMMM = ["\x00", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
    var MMM = ["\x01", "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
    var dddd = ["\x02", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
    var ddd = ["\x03", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];

    function ii(i, len) {
        var s = i + "";
        len = len || 2;
        while (s.length < len) s = "0" + s;
        return s;
    }

    var y = utc ? date.getUTCFullYear() : date.getFullYear();
    format = format.replace(/(^|[^\\])yyyy+/g, "$1" + y);
    format = format.replace(/(^|[^\\])yy/g, "$1" + y.toString().substr(2, 2));
    format = format.replace(/(^|[^\\])y/g, "$1" + y);

    var M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;
    format = format.replace(/(^|[^\\])MMMM+/g, "$1" + MMMM[0]);
    format = format.replace(/(^|[^\\])MMM/g, "$1" + MMM[0]);
    format = format.replace(/(^|[^\\])MM/g, "$1" + ii(M));
    format = format.replace(/(^|[^\\])M/g, "$1" + M);

    var d = utc ? date.getUTCDate() : date.getDate();
    format = format.replace(/(^|[^\\])dddd+/g, "$1" + dddd[0]);
    format = format.replace(/(^|[^\\])ddd/g, "$1" + ddd[0]);
    format = format.replace(/(^|[^\\])dd/g, "$1" + ii(d));
    format = format.replace(/(^|[^\\])d/g, "$1" + d);

    var H = utc ? date.getUTCHours() : date.getHours();
    format = format.replace(/(^|[^\\])HH+/g, "$1" + ii(H));
    format = format.replace(/(^|[^\\])H/g, "$1" + H);

    var h = H > 12 ? H - 12 : H == 0 ? 12 : H;
    format = format.replace(/(^|[^\\])hh+/g, "$1" + ii(h));
    format = format.replace(/(^|[^\\])h/g, "$1" + h);

    var m = utc ? date.getUTCMinutes() : date.getMinutes();
    format = format.replace(/(^|[^\\])mm+/g, "$1" + ii(m));
    format = format.replace(/(^|[^\\])m/g, "$1" + m);

    var s = utc ? date.getUTCSeconds() : date.getSeconds();
    format = format.replace(/(^|[^\\])ss+/g, "$1" + ii(s));
    format = format.replace(/(^|[^\\])s/g, "$1" + s);

    var f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();
    format = format.replace(/(^|[^\\])fff+/g, "$1" + ii(f, 3));
    f = Math.round(f / 10);
    format = format.replace(/(^|[^\\])ff/g, "$1" + ii(f));
    f = Math.round(f / 10);
    format = format.replace(/(^|[^\\])f/g, "$1" + f);

    var T = H < 12 ? "AM" : "PM";
    format = format.replace(/(^|[^\\])TT+/g, "$1" + T);
    format = format.replace(/(^|[^\\])T/g, "$1" + T.charAt(0));

    var t = T.toLowerCase();
    format = format.replace(/(^|[^\\])tt+/g, "$1" + t);
    format = format.replace(/(^|[^\\])t/g, "$1" + t.charAt(0));

    var tz = -date.getTimezoneOffset();
    var K = utc || !tz ? "Z" : tz > 0 ? "+" : "-";
    if (!utc) {
        tz = Math.abs(tz);
        var tzHrs = Math.floor(tz / 60);
        var tzMin = tz % 60;
        K += ii(tzHrs) + ":" + ii(tzMin);
    }
    format = format.replace(/(^|[^\\])K/g, "$1" + K);

    var day = (utc ? date.getUTCDay() : date.getDay()) + 1;
    format = format.replace(new RegExp(dddd[0], "g"), dddd[day]);
    format = format.replace(new RegExp(ddd[0], "g"), ddd[day]);

    format = format.replace(new RegExp(MMMM[0], "g"), MMMM[M]);
    format = format.replace(new RegExp(MMM[0], "g"), MMM[M]);

    format = format.replace(/\\(.)/g, "$1");

    return format;
};

Cảm ơn rất nhiều. Mặc dù mã cuối cùng của tôi cần một chút chỉnh sửa, nhưng hiểu biết của bạn đã giúp ích.
Seong Lee

Làm cách nào để tôi định dạng date = "2016/03/01 11:00" thành date = "Thứ bảy, ngày 01 tháng 3 năm 2016 11:00:00 GMT + 0530 (IST)"
Vishal Singh

Làm cách nào để MMMM[0]trả về tên tháng chính xác thay vì ký tự không in được ở chỉ mục 0? Có nên không MMMM[M]? Tôi chỉ là người câm? (Đừng bận tâm. Nó đặt nó thành ký tự không in được, mà nó sẽ thay thế sau này để tránh xung đột)
Danegraphics

189

Bạn có thể muốn thử

var d = new Date();
d.toLocaleString();       // -> "2/1/2013 7:37:08 AM"
d.toLocaleDateString();   // -> "2/1/2013"
d.toLocaleTimeString();  // -> "7:38:05 AM"

Tài liệu


1
tại sao phương pháp của bạn không hiệu quả với tôi? d.toLocaleTimeString()d.toLocaleTimeString()không hoạt động.
afzalex

@afzalex bạn có nghĩa là bạn không nhận được bất kỳ lợi nhuận?
Ye Lin Aung

Đúng. Tôi không tìm thấy bất kỳ phương pháp toLocaleTimeString()toLocaleTimeString()
afzalex

afzalex hãy thử cái này: new Date (). toLocaleString ();
blueberry0xff

console.log (new Date (). toLocaleString ()); // 27/09/2015, 2:52:18 PM
blueberry0xff

37

Bản cập nhật năm 2017 : sử dụng toLocaleDateStringtoLocaleTimeString để định dạng ngày và giờ. Tham số đầu tiên được truyền cho các phương thức này là một giá trị ngôn ngữ, chẳng hạn như en-us . Tham số thứ hai, nếu có, chỉ định các tùy chọn định dạng, chẳng hạn như biểu mẫu dài cho ngày trong tuần.

let date = new Date();  
let options = {  
    weekday: "long", year: "numeric", month: "short",  
    day: "numeric", hour: "2-digit", minute: "2-digit"  
};  

console.log(date.toLocaleTimeString("en-us", options)); 

Đầu ra: Thứ Tư, ngày 25 tháng 10 năm 2017, 8:19 PM

Vui lòng tham khảo liên kết dưới đây để biết thêm chi tiết.

Chuỗi ngày và giờ (JavaScript)


2
Tại thời điểm này - hơn bốn năm sau câu trả lời đầu tiên cho câu hỏi này - đây là giải pháp thuận tiện và linh hoạt nhất, và câu trả lời cho câu hỏi này. Nó nên được thúc đẩy cao hơn như một ví dụ về thực hành hiện tại (AD 2018) :-)
Jochem Schulenklopper

Rách. Cổng strftime của @ thdoan trông linh hoạt hơn. Ví dụ: toLocalTimeStringcung cấp 4 kiểu ngày tháng full long medium shortvà có lẽ ý nghĩa của những thuật ngữ đó được xác định ở đâu đó. Trong khi đó, strftime có thể (có thể) khớp với bất kỳ cái nào trong số đó và nhiều cái khác. Mặt khác, toLocalTimeStringhỗ trợ múi giờ. Tôi hy vọng rằng bao gồm múi giờ mà thời gian tiết kiệm ánh sáng ban ngày sử dụng ...
đội trưởng Puget

14

Bạn có thể sử dụng cổng strftime của tôi :

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://stackoverflow.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if ((nYear&3)!==0) return false;
      return nYear%100!==0 || nYear%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

Sử dụng mẫu:

// Returns "Thursday 4:45pm 15 Sep 2016"
strftime('%A %l:%M%P %e %b %Y');

// You can optionally pass it a Date object
// Returns "Friday 2:00pm 1 Feb 2013"
strftime('%A %l:%M%P %e %b %Y', new Date('Feb 1, 2013 2:00 PM'));

Mã mới nhất hiện có tại đây: https://github.com/thdoan/strftime


Điều này thật tuyệt. Cảm ơn bạn rất nhiều.
PerpetualStudent

7

Nhìn vào phần bên trong của lớp Date và bạn sẽ thấy rằng bạn có thể trích xuất tất cả các bit (ngày, tháng, năm, giờ, v.v.).

http://www.w3schools.com/jsref/jsref_obj_date.asp

Đối với một cái gì đó giống như Fri 23:00 1 Feb 2013mã giống như:

date = new Date();

weekdayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var dateString = weekdayNames[date.getDay()] + " " 
    + date.getHours() + ":" + ("00" + date.getMinutes()).slice(-2) + " " 
    + date.getDate() + " " + monthNames[date.getMonth()] + " " + date.getFullYear();

console.log(dateString);

**** Đã sửa đổi 2019-05-29 để giữ cho 3 người phản đối hài lòng


9
w3schools không phải là tuyệt vời. Xem w3fools . Các nguồn tham khảo tốt hơn bao gồm MDNMSDN .
gilly3

Ngày # getDay trả về một số nguyên, không phải tên của ngày trong tuần. Ngoài ra, imho MDN hoạt động kém hơn trong việc hiểu nhanh về đối tượng Date, vì vậy tôi không hiểu tại sao cần phải diễn ra sự chê bai.
Ninjaxor

Vấn đề date.getMinutes()là nó trả về một chữ số duy nhất khi số phút nhỏ hơn 10, dẫn đến thời gian như "10: 4 giờ sáng" thay vì "10:04 sáng" phổ biến hơn.
Jochem Schulenklopper

@JochemSchulenklopper Đã thêm mã không ghi ngày tháng để hiển thị số 0 ở đầu trên phút
Lee Meador

@Ninjaxor Đã thêm mã không liên quan đến ngày tháng để chuyển đổi một số thành một chuỗi. Điều này sẽ hiệu quả nếu bạn muốn đặt tên tiếng Anh.
Lee Meador

4

Có rất nhiều thư viện lớn dành cho những ai quan tâm

Ngày nay thực sự không cần thiết phải phát minh ra các công cụ định dạng của riêng bạn.


Chỉ muốn đề cập đến, kể từ tháng 10 năm 2017, momentlà tiêu chuẩn hiện tại cho những thứ liên quan đến thời gian trong Javascript.
shawon191

cảm ơn @ shawon191 về bản cập nhật :) ya, momentđá. d3cũng đã thêm một số nội dung thời gian, vì vậy nếu bạn đang sử dụng nó, bạn có thể lưu thư viện nhập github.com/d3/d3/blob/master/API.md#time-formats-d3-time-format
slf

1

Giảm 2,39KB. Một tập tin. https://github.com/rhroyston/clock-js

Giờ Hiện tại là

var str = clock.month;
var m = str.charAt(0).toUpperCase() + str.slice(1,3); //gets you abbreviated month
clock.weekday + ' ' + clock.time + ' ' + clock.day + ' ' + m + ' ' + clock.year; //"tuesday 5:50 PM 3 May 2016"

1

d = Date.now();
d = new Date(d);
d = (d.getMonth()+1)+'/'+d.getDate()+'/'+d.getFullYear()+' '+(d.getHours() > 12 ? d.getHours() - 12 : d.getHours())+':'+d.getMinutes()+' '+(d.getHours() >= 12 ? "PM" : "AM");

console.log(d);


0

Để làm việc với lớp Date cơ sở, bạn có thể xem MDN để biết các phương thức của nó (thay vì W3Schools vì lý do này ). Ở đó, bạn có thể tìm thấy mô tả tốt về mọi phương pháp hữu ích để truy cập vào từng thành phần ngày / giờ và thông tin liên quan đến việc một phương thức có bị phản đối hay không.

Nếu không, bạn có thể xem Moment.js là một thư viện tốt để sử dụng cho việc xử lý ngày và giờ. Bạn có thể sử dụng nó để thao tác ngày và giờ (chẳng hạn như phân tích cú pháp, định dạng, i18n, v.v.).


0
function formatTime(date){

  d = new Date(date);
  var h=d.getHours(),m=d.getMinutes(),l="AM";
  if(h > 12){
    h = h - 12;
  }
  if(h < 10){
    h = '0'+h;
  }
  if(m < 10){
    m = '0'+m;
  }
  if(d.getHours() >= 12){
    l="PM"
  }else{
    l="AM"
  }

  return h+':'+m+' '+l;

}

Cách sử dụng & kết quả:

var formattedTime=formatTime(new Date('2020 15:00'));
// Output: "03:00 PM"

0

Đối với kiểu mysql thực sự này, hãy sử dụng hàm này bên dưới: 2019/02/28 15:33:12

  • Nếu bạn nhấp vào
  • Nút 'Chạy đoạn mã' bên dưới
  • Nó sẽ hiển thị cho bạn một ví dụ đơn giản về đồng hồ kỹ thuật số thời gian thực Bản trình diễn sẽ xuất hiện bên dưới đoạn mã.

function getDateTime() {
        var now     = new Date(); 
        var year    = now.getFullYear();
        var month   = now.getMonth()+1; 
        var day     = now.getDate();
        var hour    = now.getHours();
        var minute  = now.getMinutes();
        var second  = now.getSeconds(); 
        if(month.toString().length == 1) {
             month = '0'+month;
        }
        if(day.toString().length == 1) {
             day = '0'+day;
        }   
        if(hour.toString().length == 1) {
             hour = '0'+hour;
        }
        if(minute.toString().length == 1) {
             minute = '0'+minute;
        }
        if(second.toString().length == 1) {
             second = '0'+second;
        }   
        var dateTime = year+'/'+month+'/'+day+' '+hour+':'+minute+':'+second;   
         return dateTime;
    }

    // example usage: realtime clock
    setInterval(function(){
        currentTime = getDateTime();
        document.getElementById("digital-clock").innerHTML = currentTime;
    }, 1000);
<div id="digital-clock"></div>


0

ISO8601 (ví dụ: HH: MM: SS, 07:55:55 hoặc 18:50:30) trên chrome:

new Date (Date.now ()). toTimeString (). substr (0,8);

trên mép :

new Date (Date.now ()). toLocaleTimeString ();


-2
function startTime() {
    var today = new Date(),
        h = checkTime(((today.getHours() + 11) % 12 + 1)),
        m = checkTime(today.getMinutes()),
        s = checkTime(today.getSeconds());
    document.getElementById('demo').innerHTML = h + ":" + m + ":" + s;
    t = setTimeout(function () {
        startTime()
    }, 500);
}
startTime();

}) ();

05:12:00


Câu trả lời của bạn không có cách nào trả lời OP.
Sнаđошƒаӽ Ngày

Hàm checkTime là gì?
Weijing Jay Lin

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.