ฉันพยายามใช้ JS เพื่อเปลี่ยนdate object
เป็นสตริงในYYYYMMDD
รูปแบบ มีวิธีที่ง่ายกว่าการเชื่อมโยงDate.getYear()
, Date.getMonth()
และDate.getDay()
?
ฉันพยายามใช้ JS เพื่อเปลี่ยนdate object
เป็นสตริงในYYYYMMDD
รูปแบบ มีวิธีที่ง่ายกว่าการเชื่อมโยงDate.getYear()
, Date.getMonth()
และDate.getDay()
?
คำตอบ:
ชิ้นส่วนของรหัสที่ถูกเปลี่ยนฉันมักจะใช้:
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();
[1]
ด้วย.length===2
เนื่องจากตัวทำดัชนีบนสตริงไม่ได้รับการสนับสนุนอย่างสมบูรณ์ ดูคำตอบนี้ด้วยเหตุผลว่าทำไม
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
ฉันไม่ชอบการเพิ่มต้นแบบ ทางเลือกอื่นคือ:
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;
rightNow
ตัวแปรรอบตัวคุณสามารถห่อnew Date
และนำกลับมาใช้ใหม่ในบรรทัดเดียว:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
ค่อนข้างเรียบง่าย แต่ควรใส่ในแค็ปซูล
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
คุณสามารถใช้toISOString
ฟังก์ชั่น:
var today = new Date();
today.toISOString().substring(0, 10);
มันจะให้รูปแบบ "yyyy-mm-dd"
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
หากคุณไม่ต้องการโซลูชัน JS ที่แท้จริงคุณสามารถใช้ jQuery UI เพื่อทำงานเช่นนี้:
$.datepicker.formatDate('yymmdd', new Date());
ฉันมักจะไม่ชอบนำเข้าห้องสมุดมากเกินไป แต่ jQuery UI นั้นมีประโยชน์มากคุณอาจใช้ที่อื่นในโครงการของคุณ
เยี่ยมชมhttp://api.jqueryui.com/datepicker/สำหรับตัวอย่างเพิ่มเติม
นี่คือรหัสบรรทัดเดียวที่คุณสามารถใช้เพื่อสร้างYYYY-MM-DD
สตริงของวันที่วันนี้
var d = new Date().toISOString().slice(0,10);
toISOString()
จะให้ 2015-12-31T22: 00: 00 GMT +0 (สองชั่วโมงก่อน)
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'
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');
นอกจากคำตอบของ 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>
("00" + (this.getDate())).slice(-2)
เพื่อรับตัวเลขสองหลักตาม ไม่มีคำสั่ง "if" หรือ "?:" และเรียกใช้ฟังก์ชัน. getX () น้อยลง หากไม่เร็วขึ้นเล็กน้อยก็สามารถอ่านได้อย่างน้อย
ฉันไม่ชอบการดัดแปลงวัตถุเนทิฟและฉันคิดว่าการคูณจะชัดเจนกว่าสตริงที่เติมสารละลายที่ยอมรับ
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));
.replace('-', '')
ต่อไปเพื่อให้ตอบคำถามของ OP) ในขณะที่คุณเป็นจริงกับคำถามดั้งเดิมของ OP และไม่จำเป็นต้องมีขั้นตอนพิเศษอีก ยอดเยี่ยม
โซลูชัน 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
toISOString
คืนยัติภังค์ต่อเนื่องหลาย ๆ
// 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
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);
console.log(dateFormated);
new Date()
สร้างวัตถุวันที่ใหม่ซึ่งเป็นเพียงเสื้อคลุมรอบ ๆ nr จาก ms ตั้งแต่ 1970/01/01 00: 00: 00.000 UTC จากนั้นtoISOString
พิมพ์ออกมาในเขตเวลาท้องถิ่น
อีกวิธีหนึ่งคือใช้toLocaleDateString
กับโลแคลที่มีรูปแบบวันที่ที่มีมาตรฐานสูงเช่นสวีเดนลิทัวเนียฮังการีเกาหลีใต้ ... :
date.toLocaleDateString('se')
หากต้องการลบตัวคั่น ( -
) เป็นเพียงเรื่องของการแทนที่ไม่ใช่ตัวเลข:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
นี่ไม่มีข้อผิดพลาดที่อาจเกิดขึ้นกับรูปแบบวันที่ UTC: วันที่ UTC อาจเป็นวันหยุดหนึ่งวันเมื่อเทียบกับวันที่ในเขตเวลาท้องถิ่น
คุณสามารถใช้รหัสบรรทัดนี้เพื่อรับวันที่ในปี
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
เวอร์ชันที่เรียบง่ายเล็กน้อยสำหรับคำตอบที่ได้รับความนิยมมากที่สุดในหัวข้อนี้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;
}
Dateformatเป็นแพ็คเกจที่ใช้มาก
วิธีใช้:
ดาวน์โหลดและติดตั้งdateformat
จาก NPM ต้องการมันในโมดูลของคุณ:
const dateFormat = require('dateformat');
จากนั้นเพียงจัดรูปแบบสิ่งของของคุณ:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
ผู้ชายคนนี้ที่นี่ => http://blog.stevenlevithan.com/archives/date-time-formatเขียนformat()
ฟังก์ชันสำหรับ Javascript ของDate
วัตถุดังนั้นจึงสามารถใช้กับรูปแบบตัวอักษรที่คุ้นเคยได้
หากคุณต้องการการจัดรูปแบบวันที่เต็มรูปแบบใน Javascript ของแอปให้ใช้งาน มิฉะนั้นหากสิ่งที่คุณต้องการทำคือการปิดการเชื่อมต่อ getYear (), getMonth (), getDay () อาจจะง่ายที่สุด
ทำงานจากคำตอบของ @ 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 บริสุทธิ์
รหัสนี้แก้ไขคำตอบของ Pierre Guilbert:
(ใช้ได้แม้หลังจาก 10,000 ปี)
YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")
ดูเหมือนว่า mootools มีให้Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
ฉันไม่แน่ใจว่ามันคุ้มค่าหรือไม่สำหรับงานนี้โดยเฉพาะ
ฉันมักจะใช้รหัสด้านล่างเมื่อฉันต้องทำ
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"
หากใช้ AngularJs (สูงสุด 1.5) คุณสามารถใช้ตัวกรองวันที่ :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
ตอบคำถามเพื่อความเรียบง่าย & อ่านง่าย
นอกจากนี้ห้ามแก้ไขสมาชิกคลาสที่กำหนดไว้ล่วงหน้าด้วยวิธีการใหม่:
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);
แล้ววันล่ะล่ะ
มันเป็นเพียง 2KB dayjs().format('YYYY-MM-DD')
และคุณยังสามารถ
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
รหัสย่อวันที่เพื่อช่วยเหลือ!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
ใช้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('-');
};
นี่คือวิธีการทั่วไปที่อนุญาตให้ใช้ทั้งวันที่และเวลาและสามารถเรียงลำดับเหมือนกันทั้งตัวเลขหรือสตริง
ขึ้นอยู่กับลำดับหมายเลขของรูปแบบ 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"
จาวาสคริปต์ดั้งเดิม:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');