จัดรูปแบบวันที่ JavaScript เป็น yyyy-mm-dd


382

ฉันมีรูปแบบSun May 11,2014วันที่ ฉันจะแปลงเป็น2014-05-11JavaScript ได้อย่างไร

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

sun may 11,2014โค้ดข้างต้นทำให้ผมมีรูปแบบวันที่เดียวกัน ฉันจะแก้ไขสิ่งนี้ได้อย่างไร


7
ฉันสงสัยว่ารหัสข้างต้นให้คุณอย่างอื่นมากกว่าข้อผิดพลาดทางไวยากรณ์
plalx

พิจารณาใช้ห้องสมุดอย่าง Moment.js จริงๆ มันจะจัดรูปแบบตามผลลัพธ์ที่ต้องการ :)
Ankur

5
ทำไมต้องใช้ไลบรารีเมื่อรหัส 5 บรรทัดสามารถทำงานได้? @Ankur
Black Mamba


ที่เกี่ยวข้อง: สตริงวันที่เวลาที่ถูกต้องใน JavaScript คืออะไร โปรดทราบว่า "Sun May 11,2014" ไม่ใช่สตริงวันที่ที่ถูกต้องและการแยกวิเคราะห์อาจล้มเหลวในบางเบราว์เซอร์
STR

คำตอบ:


524

คุณทำได้:

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('-');
}

ตัวอย่างการใช้งาน:

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

เอาท์พุท:

2014-05-11

การสาธิตเกี่ยวกับ JSFiddle: http://jsfiddle.net/abdulrauf6182012/2Frm3/


11
มีการประกาศตัวแปรหลายรายการในข้อความเดียวกันหรือไม่? stackoverflow.com/questions/694102/…
bhspencer

8
@ Fuser97381 การประกาศตัวแปรหลายรายการในข้อความเดียวกันนั้นเป็นมากกว่าการตั้งค่าสไตล์ความงาม เป็นการฝึกที่อันตราย หากคุณไม่ใส่เครื่องหมายจุลภาคโดยไม่ตั้งใจหลังจากการประกาศแต่ละครั้งคุณจะต้องสร้างตัวแปรกลาง ไม่ใช่สิ่งที่ควรได้รับการสนับสนุนในสิ่งที่อาจกลายเป็นคำตอบที่ยอมรับได้สำหรับคำถาม
bhspencer

6
'use strict';@bhspencer
Vix

3
การจัดรูปแบบสตริงวันที่ใหม่ไม่ควรขึ้นอยู่กับการแยกวิเคราะห์สตริงที่ไม่เป็นมาตรฐานโดยตัวแยกวิเคราะห์ในตัว เมื่อกำหนดรูปแบบ OP แล้วสามารถทำการฟอร์แมตด้วยรหัสที่น้อยลงได้โดยไม่ต้องใช้วันที่เลย
RobG

จะเพิ่มขึ้น 30 วันในช่วง 1 ~ 31 ได้อย่างไร
Steve Angello

456

เพียงใช้ประโยชน์จากtoISOStringวิธีการในตัวที่ทำให้วันที่ของคุณเป็นรูปแบบ ISO 8601:

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

โดยที่ DateDate เป็นวันที่ของคุณ

แก้ไข: ผู้ชายบางคนเขียนสิ่งนี้เพื่อจัดการโซนเวลาในความคิดเห็น:

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

238
ระวังด้วยวิธีนี้ในขณะที่มันแปลงเป็นวันที่เป็น UTC ครั้งแรก หากคุณอยู่ใน + เขตเวลาและส่วนเวลาของคุณอยู่ในช่วงต้นของวันก็อาจย้อนกลับได้วัน อีกทางหนึ่งหากคุณอยู่ในเขตเวลาและส่วนเวลาของคุณล่าช้าในแต่ละวัน
Luke Baulch

4
ลองใช้สิ่งนี้แทน: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] ควรแก้ไขปัญหาของเขตเวลา
mjwrazor

5
now.toISOString().substring(0,10); นี่เป็นทางเลือกที่สะอาดกว่าเพราะมันจะเตือนคุณว่าYYYY-MM-DDเป็นตัวละครสิบตัวแรกของรูปแบบ iso ที่สมบูรณ์
Gutimore

4
หมายเหตุ: การใช้โซลูชันที่มีประโยชน์ซึ่งแสดงความคิดเห็นโดย @mjwrazor ฉันต้องลบแทนการเพิ่มออฟเซตเพื่อให้ได้วันที่ที่ถูกต้อง (เปลี่ยน+ (offsetเป็น- (offset)
rococo

135

ฉันใช้วิธีนี้เพื่อรับวันที่ในรูปแบบ yyyy-mm-dd :)

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

14
คุณจัดการกับวันที่ที่เปลี่ยนโดยวันที่ดังที่กล่าวถึงโดย @Luke_Baulch ได้อย่างไร
Malvineous

7
คุณสามารถทำได้: var todayDate = new Date (); todayDate.setMinutes (todayDate.getMinutes () - todayDate.getTimezoneOffset ()); . todayDate.toISOString () ชิ้น (0,10); สิ่งนี้จะช่วยหลีกเลี่ยงปัญหา UTC
Fernando Aguilar

1
@FernandoAguilar สงสัยอย่างไรเราจะรู้ได้อย่างไรว่าเราจำเป็นต้องลบออฟเซ็ตหรือเพิ่มมัน?
ทำไมถึง 8

var todayDate = new Date(2018, 3 - 1, 26); todayDate.toISOString().slice(0, 10);"2018-03-25"ให้ฉัน ในระบบอื่นให้ฉันvar todayDate = new Date(2018, 3 - 1, 26, 17, 0, 0); todayDate.toISOString().slice(0, 10); "2018-03-27"
Salman

2
ไม่ได้ผลเสมอไป บางครั้งมันจะลบวันเนื่องจากการแปลง UTC
NickG

110

วิธีที่ง่ายที่สุดในการแปลงวันที่ของคุณเป็นรูปแบบ yyyy-mm-dd คือทำสิ่งนี้:

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

มันทำงานอย่างไร:

  • new Date("Sun May 11,2014")แปลงสตริง"Sun May 11,2014"เป็นวัตถุวันที่ที่แสดงเวลาSun May 11 2014 00:00:00ในเขตเวลาตามสถานที่ปัจจุบัน (การตั้งค่าระบบโฮสต์)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))แปลงวันที่ของคุณเป็นวัตถุวันที่ที่สอดคล้องกับเวลาSun May 11 2014 00:00:00ใน UTC (เวลามาตรฐาน) โดยการลบออฟเซ็ตเขตเวลา
  • .toISOString() แปลงวัตถุวันที่เป็นสตริง ISO 8601 2014-05-11T00:00:00.000Z
  • .split("T") แยกสตริงเป็นอาร์เรย์ ["2014-05-11", "00:00:00.000Z"]
  • [0] ใช้องค์ประกอบแรกของอาร์เรย์นั้น

การสาธิต

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
ไม่มีใครกลัวอะไรที่นี่เป็นวิธีที่ง่ายที่สุด ??
ช่องว่าง

.toISOString () ทำงานไม่ถูกต้องกับการประหยัดเวลากลางวัน
ไอเดียของโจ

2
@JoeDevmon: ฉันไม่เห็นว่ามันมีความเกี่ยวข้องที่นี่ - (date.getTimezoneOffset() * 60000 )บิตควรลดความแตกต่างเขตเวลาใด ๆ รวมทั้งผลกระทบของการประหยัดเวลากลางวัน
John Slegers

2
@ JohnSlegers นั่นคือสิ่งที่ฉันคิด แต่แล้วฉันก็ยังได้รับวันก่อนในบางกรณี ฉันได้รับการรับรองและตัวอย่างของคุณสามารถใช้งานได้แล้ว ฉันต้องมีสตริงวันที่แปลก ๆ หรือบางอย่าง ขอบคุณที่ผสานกับมันและชี้ให้เห็น +1 👍
ไอเดียของโจ

2
ฉันค้นหาสูงและต่ำทั้งใน SO และไซต์อื่น ๆ เพื่อค้นหาวิธีที่ดีที่สุดในการจัดการกับปัญหาเขตเวลาที่มีวันที่ใน JS และส่งลงมือนี่เป็นวิธีที่ง่ายที่สุดและดีที่สุด ขอบคุณ!
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)
    });
}

ผลลัพธ์:

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

1
ฉันชอบความยืดหยุ่นเพิ่มเติมที่โซลูชันนี้มอบให้กับคำตอบอื่น ๆ ของคำถามนี้ ฉันไม่ได้ทำการทดสอบอย่างละเอียด แต่สำหรับรูปแบบที่ฉันต้องการ (เช่น "yyyy-MM-dd hh: mm: ss") มันทำงานได้ตามที่คาดไว้
porcus

3
คุณสามารถหลีกเลี่ยง eaaaaaaaasily evalได้
Salman

3
นี่คือรุ่นที่หลีกเลี่ยงการ eval และความคิดเห็นดีกว่าjsfiddle.net/8904cmLd/2
m1m1k

2
ฉันได้รับประโยชน์จากคำตอบนี้ ฉันได้แทนที่บรรทัดนั้นด้วยคำสั่ง eval เป็นreturn ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2);
JesusIsMyDriver.dll

26

การรวมกันของคำตอบบางส่วน:

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

ฉันชอบวิธีแก้ปัญหาที่ดีที่สุด - อ่านง่ายและไม่พึ่งพาtoISOString()และอาจเกิดข้อผิดพลาดของเขตเวลาด้วยการใช้ฟังก์ชั่นนั้น
matt.fc

นี่เป็นครั้งแรกที่ไม่ทำให้สมองของฉันเจ็บ
ckapilla

22

หากคุณไม่มีอะไรใช้ห้องสมุดคุณก็สามารถใช้ห้องสมุดMoments.jsเช่นนี้:

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>


วิธีแก้ปัญหาที่ยอดเยี่ยม แต่มีแพ็คเกจ 300kb
Adam

13

ใช้สิ่งนี้:

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

เรียบง่ายและหวาน;)


4
การขยายไม่ได้มีไว้สำหรับรูปแบบตัวอักษร 2 ตัว มันจะแสดงตัวเลขหลักเดียวหากวันที่หรือเดือนน้อยกว่า 10 นั่นคือสาเหตุที่ไม่สามารถใช้งานได้โดยตรง
Yatender Singh

yess แต่สามารถทำได้เพียงแค่ใช้ javascript มันมีทั้งหมดตามความต้องการของคุณฉันคิดอย่างนั้นใช่ไหม @YatenderSingh
Pardeep Jain

4
ใช่ถูกต้อง แต่ตรวจสอบชื่อคำถาม "รูปแบบ" yyyy-mm-dd "ที่เขาต้องการ :)
Yatender Singh

var old_date = new วันที่ (วันที่); var new_date = old_date.getFullYear () + '-' + (old_date.getMonth () + 1) + '-' + old_date.getDate ()
Sitti Munirah Abdul Razak

1
ยิ่งใหญ่ มันใช้งานได้ง่ายและรัดกุม!
Waleed93

12

toISOString()สมมติว่าวันที่ของคุณเป็นเวลาท้องถิ่นและแปลงเป็น UTC คุณจะได้รับสตริงวันที่ที่ไม่ถูกต้อง

วิธีการต่อไปนี้ควรคืนสิ่งที่คุณต้องการ

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

ที่มา: https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/


8

ดึงข้อมูลปีเดือนและวันแล้วรวมเข้าด้วยกัน ตรงไปตรงมาเรียบง่ายและแม่นยำ

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

คุณสามารถใช้toLocaleDateString('fr-CA')กับDateวัตถุ

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

นอกจากนี้ฉันยังพบว่าสถานที่เหล่านั้นให้ผลลัพธ์ที่ถูกต้องจากรายการสถานที่นี้รายชื่อสถานที่ทั้งหมดและรหัสย่อของพวกเขา?

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


ความคิดใดว่าทำไมมันถึงได้ผล? รูปแบบ ISO เป็นเพียงค่าเริ่มต้นหรือสถานที่เหล่านี้ใช้รูปแบบนั้นอย่างแท้จริงหรือไม่ หากเป็นอดีตฉันก็กังวลว่ามันจะเปลี่ยนไปอย่างกะทันหันในอนาคต
jymbob

นี่ไม่ได้ทำงานกับ NodeJS นอกเบราว์เซอร์
Donato

@ jymbob ฉันคิดว่าโลแคลเหล่านี้ใช้รูปแบบเหล่านั้นอย่างแท้จริง ฉันมาที่คำตอบเดียวกันโดยดูที่หน้า Wikipedia นี้: en.wikipedia.org/wiki/Date_format_by_country
Ciprian Tomoiagă

5

หากต้องการพิจารณาเขตเวลาด้วยหนึ่งไลเนอร์นี้น่าจะดีถ้าไม่มีไลบรารี่:

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

5

คุณสามารถลอง: https://www.npmjs.com/package/timesolver

npm i timesolver

ใช้ในรหัสของคุณ:

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

คุณสามารถรับสตริงวันที่โดยใช้วิธีนี้:

getString

4

ไม่มีคำตอบใดที่ทำให้ฉันพอใจ ฉันต้องการโซลูชันข้ามแพลตฟอร์มที่ให้วันในเขตเวลาท้องถิ่นโดยไม่ต้องใช้ห้องสมุดภายนอก

นี่คือสิ่งที่ฉันมาด้วย:

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

ที่ควรส่งคืนวันของวันที่ในรูปแบบ YYYY-MM-DD ในเขตเวลาที่การอ้างอิงวันที่

ตัวอย่างเช่นlocalDay(new Date("2017-08-24T03:29:22.099Z"))จะส่งคืน"2017-08-23"แม้ว่าจะเป็นวันที่ 24 เวลา UTC อยู่แล้ว

คุณจะต้องpolyfill Date.prototype.toISOS เพื่อให้ทำงานใน Internet Explorer 8 ได้ แต่ควรรองรับทุกที่อื่น


อาจจะน่าสังเกตว่ามันจะให้คุณเพียง 2017-08-23 ถ้าคุณอยู่หลัง UTC อย่างเพียงพอ (เช่นในสหรัฐอเมริกา)
Simon D

3

ฉันแนะนำให้ใช้บางอย่างเช่นformatDate-jsแทนที่จะพยายามทำซ้ำทุกครั้ง เพียงใช้ห้องสมุดที่รองรับการกระทำสำคัญ ๆ ทั้งหมด

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

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

หรือ

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]

ลองสิ่งนี้!


ตัวเลือกที่สองอาจแสดงวันที่ไม่ถูกต้องเนื่องจากจะแสดงข้อมูลในเขตเวลา UTC
Ever Dev

2

นี่เป็นวิธีหนึ่งในการทำ:

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



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

คำตอบก่อนหน้านี้สองสามข้อก็โอเค แต่พวกเขาไม่ยืดหยุ่นมาก ฉันต้องการบางสิ่งที่สามารถจัดการกับคดีขอบได้มากขึ้นดังนั้นฉันจึงใช้คำตอบของ @orangleliu และขยายออกไป 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;
}

ตัวอย่างการใช้งาน:

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');

วิธีทำความสะอาด & ​​แสดงความคิดเห็นดี แต่ฉันสงสัยเกี่ยวกับอาร์กิวเมนต์แรกซึ่งจะถูกแทนที่ด้วยวันที่สดใหม่อย่างเงียบ ๆหากไม่ได้รับการยอมรับว่าเป็นวันที่ที่ถูกต้อง ฉันต้องการวาง "ตัวเลือกค่าเริ่มต้นตัวเลือกนี้" เป็นอาร์กิวเมนต์ที่ 2 แทนและส่งกลับข้อยกเว้นบางอย่าง (อาจเป็นสตริงที่ส่งกลับ "รูปแบบวันที่ไม่ถูกต้อง" แบบธรรมดา) ในกรณีที่รูปแบบไม่เป็นที่รู้จักอย่างชัดเจนในการ ผู้ทดสอบ / ผู้ใช้
Balmipour

1

สิ่งนี้ทำงานให้ฉันได้รับวันที่ปัจจุบันในรูปแบบที่ต้องการ (YYYYMMMMDD 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

ไม่จำเป็นต้องใช้ห้องสมุด

เพียงแค่จาวาสคริปต์บริสุทธิ์

ตัวอย่างด้านล่างได้รับสองเดือนล่าสุดจากวันนี้:

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))


เป็นอันตราย ในกรณีนี้คุณจะข้ามเขตเวลาชดเชย
maxence51

1

รูปแบบวันที่เข้ากันได้กับ PHP

นี่คือฟังก์ชั่นขนาดเล็กซึ่งสามารถใช้พารามิเตอร์เดียวกันกับฟังก์ชั่น PHP date()และส่งกลับสตริงวันที่ / เวลาใน JavaScript

โปรดทราบว่าสนับสนุนรูปแบบวันที่ () บางตัวเลือกจาก PHP คุณสามารถขยายpartsวัตถุเพื่อสร้างโทเค็นรูปแบบที่หายไป

/**
 * 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"

ส่วนสำคัญ

นี่คือส่วนสำคัญที่มีformatDate()ฟังก์ชั่นรุ่นปรับปรุงและตัวอย่างเพิ่มเติม: https://gist.github.com/stracker-phil/c7b68ea0b1d5bbb97af0a6a3dc66e0d9


0

อีกชุดของคำตอบ อ่านได้อย่างดี แต่ค่อนข้างยาว

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

หากวันที่จะต้องเหมือนกันในทุกโซนเวลาตัวอย่างเช่นแทนค่าบางส่วนจากฐานข้อมูลจากนั้นตรวจสอบให้แน่ใจว่าใช้เวอร์ชัน UTC ของวัน, เดือน, ฟังก์ชั่นครบถ้วนบนวัตถุวันที่ของ JavaScript เนื่องจากจะแสดงในเวลา UTC และ หลีกเลี่ยงข้อผิดพลาดในแต่ละเขตเวลา

ยิ่งไปกว่านั้นใช้ไลบรารีวันที่Moment.jsสำหรับการจัดรูปแบบนี้


0

ฉันแก้ไขคำตอบของ Samit Satputeดังนี้:

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

จัดรูปแบบและค้นหาวันที่สูงสุดและต่ำสุดจากข้อมูล 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));


สิ่งนี้เกี่ยวข้องกับคำถามอย่างไร (การจัดรูปแบบวันที่)
ปีเตอร์มอร์เทนเซ่น

0

การจัดรูปแบบสตริงวันที่ค่อนข้างตรงไปตรงมาเช่น

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.