รับสตริงในรูปแบบ YYYYMMDD จากวัตถุวันที่ของ JS หรือไม่


398

ฉันพยายามใช้ JS เพื่อเปลี่ยนdate objectเป็นสตริงในYYYYMMDDรูปแบบ มีวิธีที่ง่ายกว่าการเชื่อมโยงDate.getYear(), Date.getMonth()และDate.getDay()?


4
เชื่อมโยงทั้งสามเป็นวิธีที่จะไป
ฆCortés

5
หากคุณต้องการสตริงที่จะแยกเป็นวันที่เดียวกันอย่าลืมเพิ่มเดือน เพื่อให้ตรงกับข้อมูลจำเพาะของคุณคุณจำเป็นต้องใส่ตัวเลขหลักเดียวในเดือนและวันที่ด้วย '0'
kennebec

คำตอบ:


621

ชิ้นส่วนของรหัสที่ถูกเปลี่ยนฉันมักจะใช้:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();

16
คุณควรแทนที่[1]ด้วย.length===2เนื่องจากตัวทำดัชนีบนสตริงไม่ได้รับการสนับสนุนอย่างสมบูรณ์ ดูคำตอบนี้ด้วยเหตุผลว่าทำไม
Aidiakapi

6
var mm = (this.getMonth () + 101) .toStrung (). substring (0, 2);
9

7
สำหรับทุกคนที่ต้องการตัวอย่างที่เป็นประโยชน์ในการแก้ไขของ @Aidiakapi ฉันสร้างซอที่นี่: jsfiddle.net/pcr8xbt5/1
killercowuk

1
หากคุณต้องการมีตัวคั่นจุด:[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
Kamil Kiełczewski

3
@ 9dan ไม่ควรจะเป็นvar mm = (this.getMonth() + 101).toString().substring(1, 3)
Pnar Sbi Wer

317

ฉันไม่ชอบการเพิ่มต้นแบบ ทางเลือกอื่นคือ:

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;


51
หากคุณไม่ต้องการrightNowตัวแปรรอบตัวคุณสามารถห่อnew Dateและนำกลับมาใช้ใหม่ในบรรทัดเดียว:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
BigBlueHat

5
ฉันต้องการดังนั้นฉันทำอย่างนี้:YYYYMMDDHHmmSSsss var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");ค่อนข้างเรียบง่าย แต่ควรใส่ในแค็ปซูล
Jess

65
สิ่งนี้จะไม่ทำงานโดยทั่วไปเช่น Date.toISOString () สร้างวันที่จัดรูปแบบ UTC และสามารถข้ามขอบเขตวันที่ขึ้นอยู่กับเขตเวลา เช่นใน GMT + 1: (วันที่ใหม่ (2013,13, 25)) toISOString () == '2013-12-24T23: 00: 00.000ZZ'
weberste

26
สิ่งนี้จะล้มเหลวหากมีคนในปี 10,000 ใช้รหัส 'ความคิดถึง' ของคุณ
Trevi Awater

9
การปรับปรุงที่แนะนำเพื่อรับมือกับเขตเวลา rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Andreas

182

คุณสามารถใช้toISOStringฟังก์ชั่น:

var today = new Date();
today.toISOString().substring(0, 10);

มันจะให้รูปแบบ "yyyy-mm-dd"


24
ในบางกรณีการดำเนินการนี้จะไม่รวมวันที่ถูกต้องเนื่องจากมีการปรับเวลาตามฤดูกาลและอื่น ๆ อีกด้วย
มิเกล

1
บางทีความคิดสร้างสรรค์ของฉันอาจหัก @Miguel แต่ฉันไม่สามารถนึกถึงกรณีที่จะเกิดขึ้นได้ คุณจะช่วยยกตัวอย่างหรือไม่?
cloudworks

35
หากคุณอยู่ในเขตเวลา +1 และมีวันที่ [2015-09-01 00:00:00 GMT + 1] เมธอด toISOString () จะส่งคืนสตริง '2015-08-31T23: 00: 00.000Z 'เพราะวันที่จะถูกแปลงเป็น UTC / 0-offset ก่อนที่จะถูกทำให้เป็นสตริง
Luke Baulch

สั้นลงเล็กน้อย ... var today = (new Date ()). toISOString (). substring (0, 10);
teawithfruit

ล้มเหลวด้วย GMT ต่าง ๆ
Tobia

132

Moment.jsอาจเป็นเพื่อนของคุณ

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');

18
ดีที่มันเพิ่ม 40kb (minified, non gZip) ลงใน app.js ของฉัน แต่ฉันไปแล้วขอบคุณ :)
บาร์ต

คำตอบที่ดีที่สุดจนถึงตอนนี้!
TrulyXax

9
ฉันไม่ได้รำคาญรอจนกว่าฉันจะหลีกเลี่ยงไม่จำเป็นอีกต่อไปขณะที่ฉันเพียงแค่เพิ่มที่จุดเริ่มต้นของโครงการ :)
martinedwards

1
คุณสามารถทำให้ง่ายขึ้น:var formattedDate = moment().format('YYYYMMDD');
ns16

37

หากคุณไม่ต้องการโซลูชัน JS ที่แท้จริงคุณสามารถใช้ jQuery UI เพื่อทำงานเช่นนี้:

$.datepicker.formatDate('yymmdd', new Date());

ฉันมักจะไม่ชอบนำเข้าห้องสมุดมากเกินไป แต่ jQuery UI นั้นมีประโยชน์มากคุณอาจใช้ที่อื่นในโครงการของคุณ

เยี่ยมชมhttp://api.jqueryui.com/datepicker/สำหรับตัวอย่างเพิ่มเติม


37

นี่คือรหัสบรรทัดเดียวที่คุณสามารถใช้เพื่อสร้างYYYY-MM-DDสตริงของวันที่วันนี้

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

^ นี้! FTW! +1 .. ต้องทดสอบนิดหน่อย
โกกอล

21
เตือนยากถ้าวันของคุณคือ 2016-01-01 00:00:00 GMT +2 ก็จะกลับมา2015-12-31เพราะtoISOString()จะให้ 2015-12-31T22: 00: 00 GMT +0 (สองชั่วโมงก่อน)
Jérôme Gillard

29
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'

5
ดีที่สุด soultion
زياد

ด้วยเหตุผลบางอย่างจำเป็นต้องเพิ่มเวลา (แม้ว่า 00:00) เพื่อให้การแปลงไม่ข้ามวันกลับเมื่อฉันเรียกใช้สูตรที่นี่ชายฝั่งตะวันออกของสหรัฐอเมริกา เมื่อฉันทำอย่างนั้นมันเริ่มทำงานได้อย่างน่าเชื่อถือ สิ่งที่ฉันชอบเกี่ยวกับสิ่งนี้คือสามารถใช้วันที่ป้อนเข้าในหลายรูปแบบได้ดังนั้นฉันจึงไม่ต้องกังวลอีกต่อไป new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
นีน่า

24

นอกจากคำตอบของ oo ฉันอยากจะแนะนำการแยกการดำเนินการทางตรรกะออกจากการส่งคืนและทำให้พวกเขาเป็นส่วนหนึ่งในตัวแปรแทน

นอกจากนี้ยังใช้concat()เพื่อให้แน่ใจว่าการต่อกันของตัวแปรปลอดภัย

Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear();
  var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
  var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
  return "".concat(yyyy).concat(mm).concat(dd);
};

Date.prototype.yyyymmddhhmm = function() {
  var yyyymmdd = this.yyyymmdd();
  var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
  var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
  return "".concat(yyyymmdd).concat(hh).concat(min);
};

Date.prototype.yyyymmddhhmmss = function() {
  var yyyymmddhhmm = this.yyyymmddhhmm();
  var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
  return "".concat(yyyymmddhhmm).concat(ss);
};

var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
  yyyymmdd: <span id="a"></span>
</div>
<div>
  yyyymmddhhmm: <span id="b"></span>
</div>
<div>
  yyyymmddhhmmss: <span id="c"></span>
</div>


หากมีคนชอบที่จะใช้ฉันขอแนะนำ DRY ที่นี่นำฟังก์ชั่นที่สร้างไว้แล้วกลับมาใช้ใหม่แทนที่จะทำแบบเดียวกันซ้ำแล้วซ้ำอีก
RiZKiT

@RiZKiT DRY เป็นหลักการและไม่ใช่รูปแบบ แต่แน่นอนว่านี่สามารถปรับปรุงได้มากมาย ถ้าฉันจะใช้สิ่งนี้ด้วยตัวเองฉันอาจจะใช้รูปแบบอื่นและย้ายวิธีออกจากต้นแบบ ฉันส่วนใหญ่เขียนตัวอย่างเพื่อแสดงที่นั่นวิธีอื่นในการแก้ปัญหา ที่ซึ่งผู้คนรับจากที่นั่นก็ขึ้นอยู่กับตัวเอง
Eric Herlitz

ดี! ฉันใช้("00" + (this.getDate())).slice(-2)เพื่อรับตัวเลขสองหลักตาม ไม่มีคำสั่ง "if" หรือ "?:" และเรียกใช้ฟังก์ชัน. getX () น้อยลง หากไม่เร็วขึ้นเล็กน้อยก็สามารถอ่านได้อย่างน้อย
le hollandais volant

22

ฉันไม่ชอบการดัดแปลงวัตถุเนทิฟและฉันคิดว่าการคูณจะชัดเจนกว่าสตริงที่เติมสารละลายที่ยอมรับ

function yyyymmdd(dateIn) {
  var yyyy = dateIn.getFullYear();
  var mm = dateIn.getMonth() + 1; // getMonth() is zero-based
  var dd = dateIn.getDate();
  return String(10000 * yyyy + 100 * mm + dd); // Leading zeros for mm and dd
}

var today = new Date();
console.log(yyyymmdd(today));

ซอ: http://jsfiddle.net/gbdarren/Ew7Y4/


4
คำตอบนี้ downvote และฉันไม่รู้ว่าทำไม ฉันรู้สึกว่าคณิตศาสตร์เร็วกว่าและชัดเจนกว่าการจัดการสตริง หากใครรู้ว่าทำไมคำตอบนี้ไม่ดีโปรดแจ้งให้เราทราบ
Darren Griffith

4
ตัวนับ 10,000 จะไปเลื่อน YYYY 4 แห่ง (หลักเดือนและวันต้องการ 2 หลักในแต่ละครั้ง) และไม่มีอะไรเกี่ยวข้องกับบั๊ก Y10K ฉันชอบคำตอบนี้และสมควรได้รับความเคารพ!
A. Masson

1
ขอบคุณสำหรับคำตอบนี้ฉันสร้างซอที่นี่jsfiddle.net/amwebexpert/L6j0omb4
A. Masson

1
ฉันไม่ต้องการการคูณเลยและฉันก็ไม่เข้าใจว่าทำไมมันถึงมี jsfiddle.net/navyjax2/gbqmv0t5 มิฉะนั้นปล่อยให้มันออกมาและนี่คือคำตอบที่ดีและช่วยฉันมาก
vapcguy

1
@ D-Money อ้าฉันเข้าใจแล้วว่าคุณหมายถึงอะไร - คุณกำลังเรียงต่อกันแบบต่าง ๆ โดยการเพิ่มตัวเลขเข้าด้วยกันเพื่อหลีกเลี่ยงการดำเนินการทางคณิตศาสตร์ที่ต่างกัน มิฉะนั้นพวกเขาจะเลอะ เยี่ยมมาก! ของฉันทำงานได้เพราะฉันใช้ตัวคั่น (ซึ่งฉันต้องทำ.replace('-', '')ต่อไปเพื่อให้ตอบคำถามของ OP) ในขณะที่คุณเป็นจริงกับคำถามดั้งเดิมของ OP และไม่จำเป็นต้องมีขั้นตอนพิเศษอีก ยอดเยี่ยม
vapcguy

15

โซลูชัน JS ธรรมดา (ES5) โดยไม่มีปัญหาการข้ามวันที่อาจเกิดขึ้นจากการพิมพ์ Date.toISOString () ใน UTC:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

นี่เป็นการตอบสนองต่อความคิดเห็นของ @ weberste ในคำตอบของ @Pierre Guilbert


now.getMonth () จะส่งคืน 0 สำหรับเดือนมกราคมควรเป็น (now.getMonth () + 1)
Jas

2
ไม่ถูกต้อง. ฟังก์ชัน UTC ของวันที่คาดว่าเดือนจะอยู่ระหว่าง 0 ถึง 11 (แต่อนุญาตให้ <0 และ> 11 อื่น ๆ )
Dormouse

ทำไมคุณต้องแทนที่ยัติภังค์หลายอันด้วยอันเดียว? สามารถtoISOStringคืนยัติภังค์ต่อเนื่องหลาย ๆ
Michaël Witrant

Michael - เขากำลังแทนที่ยัติภังค์แต่ละอันที่พบด้วยยัติภังค์เดียว ยังไม่ทราบสาเหตุ (บางทีสตริงการแทนที่เป็นเพียงตัวยึดตำแหน่งสำหรับตัวคั่น) 'g' หมายถึงสิ่งที่เกิดขึ้นทั้งหมด รูปแบบที่คุณคิดคือ / [-] + / g
Gerard ONeill

2
คุณทำวันของฉัน ฉันค้นหามาหลายวันแล้วสำหรับวิธีง่ายๆในการหลีกเลี่ยงการจัดการ TimeZone ที่น่ากลัวใน Javascript และนี่ก็เป็นเคล็ดลับ!
Guillaume F.

10

// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509


นี่คือคำตอบที่ฉันใช้ ซับหนึ่งที่คำนึงถึงเขตเวลา เพื่อตอบคำถามของผู้โพสต์ดั้งเดิมเราสามารถทำได้: (ใหม่วันที่ (Date.now () - (ใหม่วันที่ ()). getTimezoneOffset () * 60000)) toISOString () แทนที่ (/ [^ 0-9] / g, "") .slice (0,8)
tomwoods

ขอบคุณเพื่อรับ YYYY-MM-DD ฉันใช้: วันที่ใหม่ (Date.now () - (วันที่ใหม่ ()). getTimezoneOffset () * 60000) .toISOString (). slice (0, 10) .replace (/ [ ^ 0-9] / g, "-")
Nick Humphrey

7

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);


ฉลาดมาก ขอบคุณ
JMaylin

4
จะไม่ทำงานเนื่องจาก Date ใหม่ () มีเขตเวลาและ Date.toISOString () คือ UTC ดูคำตอบของฉัน
Dormouse

@Douse ไม่ได้เป็นวิธีอื่น ๆ ? new Date()สร้างวัตถุวันที่ใหม่ซึ่งเป็นเพียงเสื้อคลุมรอบ ๆ nr จาก ms ตั้งแต่ 1970/01/01 00: 00: 00.000 UTC จากนั้นtoISOStringพิมพ์ออกมาในเขตเวลาท้องถิ่น
Stijn de Witt

Nope, Date.toISOString () พิมพ์ใน UTC
Dormouse

7

อีกวิธีหนึ่งคือใช้toLocaleDateStringกับโลแคลที่มีรูปแบบวันที่ที่มีมาตรฐานสูงเช่นสวีเดนลิทัวเนียฮังการีเกาหลีใต้ ... :

date.toLocaleDateString('se')

หากต้องการลบตัวคั่น ( -) เป็นเพียงเรื่องของการแทนที่ไม่ใช่ตัวเลข:

console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );

นี่ไม่มีข้อผิดพลาดที่อาจเกิดขึ้นกับรูปแบบวันที่ UTC: วันที่ UTC อาจเป็นวันหยุดหนึ่งวันเมื่อเทียบกับวันที่ในเขตเวลาท้องถิ่น



5

เวอร์ชันที่เรียบง่ายเล็กน้อยสำหรับคำตอบที่ได้รับความนิยมมากที่สุดในหัวข้อนี้https://stackoverflow.com/a/3067896/5437379 :

function toYYYYMMDD(d) {
    var yyyy = d.getFullYear().toString();
    var mm = (d.getMonth() + 101).toString().slice(-2);
    var dd = (d.getDate() + 100).toString().slice(-2);
    return yyyy + mm + dd;
}

5

Dateformatเป็นแพ็คเกจที่ใช้มาก

วิธีใช้:

ดาวน์โหลดและติดตั้งdateformatจาก NPM ต้องการมันในโมดูลของคุณ:

const dateFormat = require('dateformat');

จากนั้นเพียงจัดรูปแบบสิ่งของของคุณ:

const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');


4

ผู้ชายคนนี้ที่นี่ => http://blog.stevenlevithan.com/archives/date-time-formatเขียนformat()ฟังก์ชันสำหรับ Javascript ของDateวัตถุดังนั้นจึงสามารถใช้กับรูปแบบตัวอักษรที่คุ้นเคยได้

หากคุณต้องการการจัดรูปแบบวันที่เต็มรูปแบบใน Javascript ของแอปให้ใช้งาน มิฉะนั้นหากสิ่งที่คุณต้องการทำคือการปิดการเชื่อมต่อ getYear (), getMonth (), getDay () อาจจะง่ายที่สุด


4

ทำงานจากคำตอบของ @ oo สิ่งนี้จะให้สตริงกลับของวันตามสตริงรูปแบบ คุณสามารถเพิ่ม regex ปี 2 หลักสำหรับปี & มิลลิวินาทีและถ้าคุณต้องการ

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

ฉันไม่รู้ว่ามีประสิทธิภาพอย่างไรโดยเฉพาะอย่างยิ่งฉลาดอย่างสมบูรณ์เพราะใช้ regex จำนวนมาก อาจใช้งานบางอย่างที่ฉันไม่เชี่ยวชาญ js บริสุทธิ์


4

รหัสนี้แก้ไขคำตอบของ Pierre Guilbert:

(ใช้ได้แม้หลังจาก 10,000 ปี)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")


3

ฉันมักจะใช้รหัสด้านล่างเมื่อฉันต้องทำ

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

เพื่ออธิบาย, .slice (-2) ให้อักขระสองตัวสุดท้ายของสตริง

ดังนั้นไม่ว่าจะมีอะไรเราสามารถเพิ่ม "0" ลงในวันหรือเดือนและเพียงแค่ขอให้สองคนสุดท้ายเพราะมันเป็นสองสิ่งที่เราต้องการเสมอ

ดังนั้นถ้า MyDate.getMonth () ส่งคืน 9 มันจะเป็น:

("0" + "9") // Giving us "09"

ดังนั้นการเพิ่ม .slice (-2) ที่ทำให้เรามีอักขระสองตัวสุดท้ายซึ่งก็คือ:

("0" + "9").slice(-2)

"09"

แต่ถ้า date.getMonth () ส่งคืน 10 มันจะเป็น:

("0" + "10") // Giving us "010"

ดังนั้นการเพิ่ม .slice (-2) ทำให้เรามีอักขระสองตัวสุดท้ายหรือ:

("0" + "10").slice(-2)

"10"


3

ตอบคำถามเพื่อความเรียบง่าย & อ่านง่าย
นอกจากนี้ห้ามแก้ไขสมาชิกคลาสที่กำหนดไว้ล่วงหน้าด้วยวิธีการใหม่:

function getDateInYYYYMMDD() {
    let currentDate = new Date();

    // year
    let yyyy = '' + currentDate.getFullYear();

    // month
    let mm = ('0' + (currentDate.getMonth() + 1));  // prepend 0 // +1 is because Jan is 0
    mm = mm.substr(mm.length - 2);                  // take last 2 chars

    // day
    let dd = ('0' + currentDate.getDate());         // prepend 0
    dd = dd.substr(dd.length - 2);                  // take last 2 chars

    return yyyy + "" + mm + "" + dd;
}

var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);


2

หากคุณไม่สนใจรวมถึงห้องสมุดเพิ่มเติม (แต่เล็ก) Sugar.jsมีฟังก์ชั่นที่ดีมากมายสำหรับการทำงานกับวันที่ใน JavaScript เพื่อจัดรูปแบบวันที่ใช้ฟังก์ชั่นการจัดรูปแบบ :

new Date().format("{yyyy}{MM}{dd}")

2

yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));


1
การเพิ่มคำอธิบายลงในคำตอบของคุณจะช่วยให้คุณ upvotes พยายามอธิบายสิ่งที่คุณทำในรหัสนี้เพื่อให้ผู้อื่นเข้าใจได้ชัดเจนยิ่งขึ้น
Muhammad Omer Aslam

ในโหมดเข้มงวดหรือการใช้ typescript "ให้ f, yyyymmdd = x => ... " แทน ฟังก์ชัน yyyymmdd และ f ไม่ได้ถูกกำหนดไว้เป็นอย่างอื่น
สูงสุด


2

ใช้padStart :

Date.prototype.yyyymmdd = function() {
    return [
        this.getFullYear(),
        (this.getMonth()+1).toString().padStart(2, '0'), // getMonth() is zero-based
        this.getDate().toString().padStart(2, '0')
    ].join('-');
};

1

นี่คือวิธีการทั่วไปที่อนุญาตให้ใช้ทั้งวันที่และเวลาและสามารถเรียงลำดับเหมือนกันทั้งตัวเลขหรือสตริง

ขึ้นอยู่กับลำดับหมายเลขของรูปแบบ Date ISO ให้แปลงเป็นเขตเวลาท้องถิ่นและลบตัวเลขที่ไม่ใช่ตัวเลข เช่น:

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

การใช้

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"

1

จาวาสคริปต์ดั้งเดิม:

new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');

1
สิ่งนี้ไม่ได้เลื่อนเดือนด้วย 0 เพื่อให้เดือนเป็น 2 หลัก
Attila Szeremi

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