Định dạng ngày JavaScript là yyyy-mm-dd


382

Tôi có một ngày với định dạng Sun May 11,2014. Làm cách nào tôi có thể chuyển đổi nó sang 2014-05-11sử dụng JavaScript?

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';

    return [d[0], d[1], d[2], d[3]].join(' ');
}

var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));

Các mã ở trên cho tôi định dạng ngày tương tự , sun may 11,2014. Làm thế nào tôi có thể sửa lỗi này?


7
Tôi nghi ngờ rằng đoạn mã trên cung cấp cho bạn bất cứ điều gì khác ngoài lỗi cú pháp.
plalx

Thực sự xem xét sử dụng một thư viện như Moment.js. Nó sẽ định dạng trong kết quả mong muốn :)
Ankur

5
Tại sao sử dụng thư viện khi 5 dòng mã có thể thực hiện công việc? @Ankur
Mamba đen


Liên quan: Chuỗi thời gian ngày hợp lệ trong JavaScript là gì? Lưu ý rằng "Chủ Nhật ngày 11 tháng 5 năm 2014" không phải là chuỗi ngày hợp lệ và phân tích cú pháp có thể thất bại trong một số trình duyệt.
str

Câu trả lời:


524

Bạn có thể làm:

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();

    if (month.length < 2) 
        month = '0' + month;
    if (day.length < 2) 
        day = '0' + day;

    return [year, month, day].join('-');
}

Ví dụ sử dụng:

alert(formatDate('Sun May 11,2014'));

Đầu ra:

2014-05-11

Bản trình diễn trên JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/


11
Thực sự nhiều khai báo biến trong cùng một tuyên bố? stackoverflow.com/questions/694102/
Mạnh

8
@ Fuser97381 Khai báo nhiều biến trong cùng một câu lệnh không chỉ là một sở thích kiểu thẩm mỹ. Đó là một thực tế nguy hiểm. Nếu bạn vô tình không thêm dấu phẩy sau mỗi lần khai báo, bạn sẽ tạo ra các biến toàn cục. Không phải cái gì đó nên được khuyến khích về những gì có thể trở thành câu trả lời kinh điển cho một câu hỏi.
bhspencer

6
'use strict';@bhspencer
Vix

3
Định dạng lại chuỗi ngày không nên phụ thuộc vào phân tích thành công chuỗi không chuẩn bằng trình phân tích cú pháp tích hợp. Với định dạng OP, nó có thể được định dạng lại theo ít mã hơn mà không cần sử dụng Ngày.
RobG

Làm cách nào để tăng thêm 30 ngày trong phạm vi 1 ~ 31?
Steve Angello

456

Chỉ cần tận dụng toISOStringphương thức tích hợp đưa ngày của bạn đến định dạng ISO 8601:

yourDate.toISOString().split('T')[0]

Trong đó yourDate là đối tượng ngày của bạn.

Chỉnh sửa: một số người đã viết này để xử lý múi giờ trong các bình luận:

const offset = yourDate.getTimezoneOffset()
yourDate = new Date(yourDate.getTime() + (offset*60*1000))
return yourDate.toISOString().split('T')[0]

238
HÃY CẨN THẬN với phương pháp này khi lần đầu tiên chuyển đổi thành ngày thành UTC. Nếu bạn ở trong + múi giờ và phần thời gian của bạn là vào đầu ngày, thì nó có thể quay lại một ngày. Ngoài ra, nếu bạn ở trong múi giờ và phần thời gian của bạn bị trễ trong ngày, thì nó có thể chuyển tiếp một ngày.
Luke Baulch

4
Thay vào đó, hãy thử:new Date(yourDateStr).toISOString().split('T')[0]
exbuddha

24
const offset = yourDate.getTimezoneOffset(); yourDate = new Date(yourDate.getTime() + (offset*60*1000)); yourDate.toISOString().split('T')[0] điều này sẽ giải quyết vấn đề múi giờ
mjwrazor

5
now.toISOString().substring(0,10); Đây là một thay thế sạch hơn, vì nó nhắc nhở bạn rằng YYYY-MM-DDmười ký tự đầu tiên của định dạng iso hoàn chỉnh
Gut Morph

4
Lưu ý: sử dụng giải pháp hữu ích được nhận xét bởi @mjwrazor, tôi đã phải trừ thay vì thêm phần bù để có được ngày chính xác (thay đổi + (offsetthành a - (offset)
rococo

135

Tôi sử dụng cách này để lấy ngày ở định dạng yyyy-mm-dd :)

var todayDate = new Date().toISOString().slice(0,10);

14
Làm thế nào để bạn xử lý việc chuyển đổi ngày theo một ngày như được đề cập ở đây bởi @Luke_Baulch?
Malvineous

7
Bạn có thể làm điều này: var todayDate = new Date (); todayDate.setMinutes (todayDate.getMinutes () - todayDate.getTimezone Offerset ()); hôm nayDate.toISOString (). lát (0,10); Điều này sẽ giúp tránh vấn đề UTC.
Fernando Aguilar

1
@FernandoAguilar Một nghi ngờ mặc dù, làm thế nào để chúng ta biết chúng ta cần phải trừ đi phần bù hoặc thêm nó?
whyAto8

var todayDate = new Date(2018, 3 - 1, 26); todayDate.toISOString().slice(0, 10);mang lại cho tôi "2018-03-25". Trên một hệ thống khác var todayDate = new Date(2018, 3 - 1, 26, 17, 0, 0); todayDate.toISOString().slice(0, 10);cho tôi "2018-03-27".
Salman A

2
Không phải lúc nào cũng làm việc. Nó đôi khi trừ đi một ngày do chuyển đổi UTC.
NickG

110

Cách đơn giản nhất để chuyển đổi ngày của bạn sang định dạng yyyy-mm-dd, là làm điều này:

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

Làm thế nào nó hoạt động:

  • new Date("Sun May 11,2014")chuyển đổi chuỗi "Sun May 11,2014"thành một đối tượng ngày biểu thị thời gian Sun May 11 2014 00:00:00trong múi giờ dựa trên ngôn ngữ hiện tại (cài đặt hệ thống máy chủ)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))chuyển đổi ngày của bạn thành một đối tượng ngày tương ứng với thời gian Sun May 11 2014 00:00:00trong UTC (giờ chuẩn) bằng cách trừ đi phần bù múi giờ
  • .toISOString() chuyển đổi đối tượng ngày thành chuỗi ISO 8601 2014-05-11T00:00:00.000Z
  • .split("T") chia chuỗi thành mảng ["2014-05-11", "00:00:00.000Z"]
  • [0] lấy phần tử đầu tiên của mảng đó

Bản giới thiệu

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

console.log(dateString);


20
Không ai khác kinh ngạc rằng đây là cách đơn giản nhất ??
khoảng cách

.toISOString () không hoạt động chính xác với tiết kiệm ánh sáng ban ngày.
Ý tưởng của Joe

2
@JoeDevmon: Tôi không thấy điều đó có liên quan ở đây. Các - (date.getTimezoneOffset() * 60000 )bit nên loại bỏ bất kỳ sự khác biệt múi giờ, trong đó có tác động của thời gian tiết kiệm ánh sáng ban ngày.
John Slegers

2
@ JohnSlegers đó là những gì tôi đã nghĩ, nhưng sau đó tôi vẫn nhận được một ngày trước đó trong một số trường hợp. Tôi tái cấu trúc và ví dụ của bạn hoạt động bây giờ. Tôi phải có một chuỗi ngày kỳ lạ hoặc một cái gì đó. Cảm ơn đã gắn bó với nó và chỉ ra rằng. +1
Ý tưởng của Joe

2
Tôi đã tìm kiếm cao và thấp trên khắp SO và các trang web khác để tìm ra cách tốt nhất để giải quyết các vấn đề múi giờ với ngày tháng trong JS, và thực tế, đây là cách dễ nhất và tốt nhất. Cảm ơn bạn!
HartleySan

34
format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + eval('z.' + v.slice(-1))).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

Kết quả:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11

1
Tôi thích sự linh hoạt bổ sung mà giải pháp này đưa ra cho các câu trả lời khác cho câu hỏi này. Tôi chưa kiểm tra kỹ lưỡng điều này, nhưng đối với định dạng tôi mong muốn (ví dụ: "yyyy-MM-dd hh: mm: ss"), nó hoạt động như mong đợi.
porcus

3
Bạn có thể tránh xa eval.
Salman A

3
đây là phiên bản tránh eval và bình luận tốt hơn jsfiddle.net/8904cmLd/2
m1m1k

2
Tôi được hưởng lợi từ phản ứng này. Tôi đã thay thế dòng đó bằng tuyên bố eval thànhreturn ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2);
JesusIsMyDriver.dll

26

Một sự kết hợp của một số câu trả lời:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');

Tôi thích giải pháp tốt nhất - dễ đọc và không dựa vào toISOString()và những cạm bẫy múi giờ tiềm năng khi sử dụng chức năng đó.
matt.fc

đây là cái đầu tiên không làm não tôi bị tổn thương.
ckapilla

22

Nếu bạn không có bất cứ điều gì chống lại việc sử dụng các thư viện, bạn chỉ có thể sử dụng thư viện Moments.js như vậy:

var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');

var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>


Giải pháp tuyệt vời, nhưng đó là gói 300kb
Adam

13

Đơn giản chỉ cần sử dụng này:

var date = new Date('1970-01-01'); // Or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

Đơn giản và ngọt ngào;)


4
đệm không có ở định dạng 2 chữ cái. nó sẽ hiển thị một chữ số nếu ngày hoặc tháng dưới 10, tại sao không thể sử dụng trực tiếp.
Yatender Singh

vâng nhưng điều đó có thể đạt được chỉ bằng cách sử dụng javascript, nó hoàn toàn tùy theo yêu cầu của bạn, tôi nghĩ vậy phải không? @YatenderSingh
Pardeep Jain

4
vâng đúng nhưng kiểm tra tiêu đề của định dạng câu hỏi "yyyy-mm-dd" mà anh ấy muốn :)
Yatender Singh

var old_date = ngày mới (ngày); var new_date = old_date.getFullYear () + '-' + (old_date.getMonth () + 1) + '-' + old_date.getDate ()
Sitti Munirah Abdul Razak

1
Tuyệt quá. Nó làm việc và đơn giản và súc tích!
Waleed93

12

toISOString()giả sử ngày của bạn là giờ địa phương và chuyển đổi nó thành UTC. Bạn sẽ nhận được một chuỗi ngày không chính xác.

Phương pháp sau sẽ trả về những gì bạn cần.

Date.prototype.yyyymmdd = function() {         

    var yyyy = this.getFullYear().toString();                                    
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
    var dd  = this.getDate().toString();             

    return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};

Nguồn: https://blog.justin.kelly.org.au/simple-javascript-feft-to-format-the-date-as-yyyy-mm-dd/


9

Lấy năm, tháng và ngày, sau đó đặt chúng lại với nhau. Thẳng, đơn giản và chính xác.

function formatDate(date) {
    var year = date.getFullYear().toString();
    var month = (date.getMonth() + 101).toString().substring(1);
    var day = (date.getDate() + 100).toString().substring(1);
    return year + "-" + month + "-" + day;
}

//Usage example:
alert(formatDate(new Date()));


8

Bạn có thể sử dụng toLocaleDateString('fr-CA')trên Dateđối tượng

console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));

Ngoài ra tôi phát hiện ra rằng những địa phương đó cho kết quả đúng từ danh sách địa phương này Danh sách tất cả các địa điểm và mã ngắn của họ?

'en-CA'
'fr-CA'
'lt-LT'
'sv-FI'
'sv-SE'


Bất cứ ý tưởng tại sao điều này làm việc? Là định dạng ISO chỉ là mặc định, hoặc những địa phương này thực sự sử dụng định dạng đó? Nếu trước đây tôi lo ngại rằng nó có thể thay đổi bất ngờ trong tương lai.
jymbob

Đây không phải là hoạt động với NodeJS bên ngoài trình duyệt.
Donato

@jymbob Tôi nghĩ rằng những địa phương này thực sự sử dụng các định dạng đó. Tôi đã đi đến cùng một câu trả lời bằng cách xem trang Wikipedia này: en.wikipedia.org/wiki/Date_format_by_country
Ciprian Tomoiagă

5

Để xem xét múi giờ cũng vậy, lớp lót này phải tốt mà không cần bất kỳ thư viện nào:

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]

5

Bạn có thể thử điều này: https://www.npmjs.com/package/timesolver

npm i timesolver

Sử dụng nó trong mã của bạn:

const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");

Bạn có thể lấy chuỗi ngày bằng phương pháp này:

getString

4

Không có câu trả lời nào làm tôi hài lòng. Tôi muốn một giải pháp đa nền tảng cho tôi một ngày trong múi giờ địa phương mà không cần sử dụng bất kỳ thư viện bên ngoài nào.

Đây là những gì tôi nghĩ ra:

function localDay(time) {
  var minutesOffset = time.getTimezoneOffset()
  var millisecondsOffset = minutesOffset*60*1000
  var local = new Date(time - millisecondsOffset)
  return local.toISOString().substr(0, 10)
}

Điều đó sẽ trả về ngày của ngày, ở định dạng YYYY-MM-DD, trong múi giờ các tham chiếu ngày.

Vì vậy, ví dụ, localDay(new Date("2017-08-24T03:29:22.099Z"))sẽ trở lại "2017-08-23"mặc dù đã là ngày 24 tại UTC.

Bạn sẽ cần polyfill Date.prototype.toISOString để nó hoạt động trong Internet Explorer 8, nhưng nó nên được hỗ trợ ở mọi nơi khác.


Có lẽ đáng lưu ý rằng nó sẽ chỉ cung cấp cho bạn 2017-08-23 nếu bạn đủ sau UTC (ví dụ: ở Hoa Kỳ).
Simon D

3

Tôi đề nghị sử dụng một cái gì đó như formatDate-js thay vì cố gắng sao chép nó mỗi lần. Chỉ cần sử dụng một thư viện hỗ trợ tất cả các hành động strftime chính.

new Date().format("%Y-%m-%d")

3
new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

hoặc là

new Date().toISOString().split('T')[0]
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString()
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString().split('T')[0]

Thử cái này!


Tùy chọn thứ hai có thể hiển thị ngày sai vì nó sẽ hiển thị dữ liệu theo múi giờ UTC.
Bao giờ hết

2

Đây là một cách để làm điều đó:

var date = Date.parse('Sun May 11,2014');

function format(date) {
  date = new Date(date);

  var day = ('0' + date.getDate()).slice(-2);
  var month = ('0' + (date.getMonth() + 1)).slice(-2);
  var year = date.getFullYear();

  return year + '-' + month + '-' + day;
}

console.log(format(date));

2

Date.js là tuyệt vời cho việc này.

require("datejs")
(new Date()).toString("yyyy-MM-dd")

1

function myYmd(D){
    var pad = function(num) {
        var s = '0' + num;
        return s.substr(s.length - 2);
    }
    var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
    return Result;
}

var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));


1

var d = new Date("Sun May 1,2014");

var year  = d.getFullYear();
var month = d.getMonth() + 1;
var day   = d.getDate(); 

month = checkZero(month);             
day   = checkZero(day);

var date = "";

date += year;
date += "-";
date += month;
date += "-";
date += day;

document.querySelector("#display").innerHTML = date;
    
function checkZero(i) 
{
    if (i < 10) 
    {
        i = "0" + i
    };  // add zero in front of numbers < 10

    return i;
}
<div id="display"></div>


1
new Date(new Date(YOUR_DATE.toISOString()).getTime() - 
                 (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)

1

Một vài câu trả lời trước là OK, nhưng chúng không linh hoạt. Tôi muốn một cái gì đó thực sự có thể xử lý nhiều trường hợp cạnh hơn, vì vậy tôi đã lấy câu trả lời của @orangleliu và mở rộng về nó. https://jsfiddle.net/8904cmLd/1/

function DateToString(inDate, formatString) {
    // Written by m1m1k 2018-04-05

    // Validate that we're working with a date
    if(!isValidDate(inDate))
    {
        inDate = new Date(inDate);
    }

    // See the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014', 'USA');
    //formatString = CountryCodeToDateFormat(formatString);

    var dateObject = {
        M: inDate.getMonth() + 1,
        d: inDate.getDate(),
        D: inDate.getDate(),
        h: inDate.getHours(),
        m: inDate.getMinutes(),
        s: inDate.getSeconds(),
        y: inDate.getFullYear(),
        Y: inDate.getFullYear()
    };

    // Build Regex Dynamically based on the list above.
    // It should end up with something like this: "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
    var dateMatchRegex = joinObj(dateObject, "+|") + "+";
    var regEx = new RegExp(dateMatchRegex,"g");
    formatString = formatString.replace(regEx, function(formatToken) {
        var datePartValue = dateObject[formatToken.slice(-1)];
        var tokenLength = formatToken.length;

        // A conflict exists between specifying 'd' for no zero pad -> expand
        // to '10' and specifying yy for just two year digits '01' instead
        // of '2001'.  One expands, the other contracts.
        //
        // So Constrict Years but Expand All Else
        if (formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
        {
            // Expand single digit format token 'd' to
            // multi digit value '10' when needed
            var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
        }
        var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
        return (zeroPad + datePartValue).slice(-tokenLength);
    });

    return formatString;
}

Ví dụ sử dụng:

DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');

Giải pháp sạch đẹp & bình luận. Tuy nhiên, tôi nghi ngờ về đối số đầu tiên, được âm thầm thay thế bằng một ngày mới nếu không được công nhận là một ngày hợp lệ. Tôi muốn đặt này "giá trị mặc định optionnal" như là đối số thứ 2 thay vào đó, và trả lại một số loại ngoại lệ (có thể là một đơn giản "định dạng ngày tháng hợp lệ" trở string) trong trường hợp định dạng không được công nhận, vì vậy lỗi xuất hiện rõ ràng để người thử nghiệm / người dùng
Balmipour

1

Điều này làm việc cho tôi để có được ngày hiện tại ở định dạng mong muốn (YYYYMMDD HH: MM: SS):

var d = new Date();

var date1 = d.getFullYear() + '' +
            ((d.getMonth()+1) < 10 ? "0" + (d.getMonth() + 1) : (d.getMonth() + 1)) +
            '' +
            (d.getDate() < 10 ? "0" + d.getDate() : d.getDate());

var time1 = (d.getHours() < 10 ? "0" + d.getHours() : d.getHours()) +
            ':' +
            (d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes()) +
            ':' +
            (d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds());

print(date1+' '+time1);

1

Không cần thư viện

Chỉ là JavaScript thuần túy.

Ví dụ dưới đây nhận được hai tháng cuối cùng kể từ hôm nay:

var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))


Nguy hiểm. Trong trường hợp đó, bạn bỏ qua phần bù múi giờ.
maxence51

1

Định dạng ngày tương thích PHP

Đây là một hàm nhỏ có thể lấy các tham số giống như hàm PHP date()và trả về chuỗi ngày / giờ trong JavaScript.

Lưu ý rằng không phải tất cả các tùy chọn định dạng ngày () từ PHP đều được hỗ trợ. Bạn có thể mở rộng partsđối tượng để tạo mã thông báo định dạng bị thiếu

/**
 * Date formatter with PHP "date()"-compatible format syntax.
 */
const formatDate = (format, date) => {
  if (!format) { format = 'Y-m-d' }
  if (!date) { date = new Date() }

  const parts = {
    Y: date.getFullYear().toString(),
    y: ('00' + (date.getYear() - 100)).toString().slice(-2),
    m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
    n: (date.getMonth() + 1).toString(),
    d: ('0' + date.getDate()).toString().slice(-2),
    j: date.getDate().toString(),
    H: ('0' + date.getHours()).toString().slice(-2),
    G: date.getHours().toString(),
    i: ('0' + date.getMinutes()).toString().slice(-2),
    s: ('0' + date.getSeconds()).toString().slice(-2)
  }

  const modifiers = Object.keys(parts).join('')
  const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
  const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')

  return format
    .replace(reDate, $0 => parts[$0])
    .replace(reEscape, ($0, $1) => $1)
}

// ----- EXAMPLES -----
console.log( formatDate() ); // "2019-05-21"
console.log( formatDate('H:i:s') ); // "16:21:32"
console.log( formatDate('Y-m-d, o\\n H:i:s') ); // "2019-05-21, on 16:21:32"
console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"

Ý chính

Đây là một ý chính với phiên bản cập nhật của formatDate()chức năng và các ví dụ bổ sung: https://gist.github.com/stracker-phil/c7b68ea0b1d5bbb97af0a6a3dc66e0d9


0

Một kết hợp khác của các câu trả lời. Rất dễ đọc, nhưng hơi dài dòng.

function getCurrentDayTimestamp() {
  const d = new Date();

  return new Date(
    Date.UTC(
      d.getFullYear(),
      d.getMonth(),
      d.getDate(),
      d.getHours(),
      d.getMinutes(),
      d.getSeconds()
    )
  // `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
  // and we want the first part ("2017-08-22")
  ).toISOString().slice(0, 10);
}

0

Nếu ngày cần phải giống nhau trên tất cả các múi giờ, ví dụ đại diện cho một số giá trị từ cơ sở dữ liệu, thì hãy chắc chắn sử dụng các phiên bản UTC của ngày, tháng, chức năng đầy đủ trên đối tượng ngày JavaScript vì điều này sẽ hiển thị trong thời gian UTC và tránh các lỗi do một trong các múi giờ nhất định.

Thậm chí tốt hơn, sử dụng thư viện ngày Moment.js cho loại định dạng này.


0

Tôi đã sửa đổi phản hồi của Samit Satpute như sau:

var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);


0

Định dạng và tìm ngày tối đa và tối thiểu từ dữ liệu hashmap:

var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};

function findMaxMinDate(obj){
  let formatEncode = (id)=> { let s = id.split('-'); return `${s[0]+'-'+s[2]+'-'+s[1]}`}
  let formatDecode = (id)=> { let s = id.split('/'); return `${s[2]+'-'+s[0]+'-'+s[1]}`}
  let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
  let min = new Date(Math.min.apply(null, arr)).toLocaleDateString();
  let max = new Date(Math.max.apply(null, arr)).toLocaleDateString();
  return {maxd: `${formatDecode(max)}`, mind:`${formatDecode(min)}`}
}

console.log(findMaxMinDate(obj));


Làm thế nào điều này có liên quan đến câu hỏi (định dạng một ngày)?
Peter Mortensen

0

Định dạng lại chuỗi ngày khá đơn giản, ví dụ:

var s = 'Sun May 11,2014';

function reformatDate(s) {
  function z(n){return ('0' + n).slice(-2)}
  var months = [,'jan','feb','mar','apr','may','jun',
                 'jul','aug','sep','oct','nov','dec'];
  var b = s.split(/\W+/);
  return b[3] + '-' +
    z(months.indexOf(b[1].substr(0,3).toLowerCase())) + '-' +
    z(b[2]);
}

console.log(reformatDate(s));

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.