Tôi đang cố gắng sử dụng JS để biến date object
một chuỗi thành YYYYMMDD
định dạng. Có một cách dễ dàng hơn concatenating Date.getYear()
, Date.getMonth()
và Date.getDay()
?
Tôi đang cố gắng sử dụng JS để biến date object
một chuỗi thành YYYYMMDD
định dạng. Có một cách dễ dàng hơn concatenating Date.getYear()
, Date.getMonth()
và Date.getDay()
?
Câu trả lời:
Tôi đã sử dụng đoạn mã bị thay đổi:
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]
bằng .length===2
, bởi vì một bộ chỉ mục trên chuỗi không được hỗ trợ đầy đủ. Xem câu trả lời này cho lý do tại sao.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
Tôi không thích thêm vào nguyên mẫu. Một thay thế sẽ là:
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
biến xung quanh, bạn có thể gói new Date
và lấy lại tất cả trong một dòng:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, vì vậy tôi đã làm điều này : var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Khá đơn giản, nhưng nên được gói gọn.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Bạn có thể sử dụng toISOString
chức năng:
var today = new Date();
today.toISOString().substring(0, 10);
Nó sẽ cung cấp cho bạn định dạng "yyyy-mm-dd".
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Nếu bạn không cần một giải pháp JS thuần túy, bạn có thể sử dụng Giao diện người dùng jQuery để thực hiện công việc như sau:
$.datepicker.formatDate('yymmdd', new Date());
Tôi thường không muốn nhập quá nhiều thư viện. Nhưng jQuery UI rất hữu ích, bạn có thể sẽ sử dụng nó ở một nơi khác trong dự án của bạn.
Truy cập http://api.jqueryui.com/datepicker/ để biết thêm ví dụ
Đây là một dòng mã duy nhất mà bạn có thể sử dụng để tạo một YYYY-MM-DD
chuỗi ngày hôm nay.
var d = new Date().toISOString().slice(0,10);
toISOString()
sẽ cung cấp cho 2015-12-31T22: 00: 00 GMT +0 (hai giờ trước).
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');
Ngoài câu trả lời của oo, tôi muốn khuyên bạn nên tách các hoạt động logic khỏi trả về và thay vào đó đặt chúng làm ternary trong các biến.
Ngoài ra, sử dụng concat()
để đảm bảo nối các biến an toàn
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)
để có được các số có hai chữ số. Không có câu lệnh "if" hoặc "?:" Và ít lệnh gọi đến hàm .getX (). Nếu không nhanh hơn một chút, thì ít nhất nó cũng dễ đọc hơn.
Tôi không thích sửa đổi các đối tượng bản địa và tôi nghĩ rằng phép nhân rõ ràng hơn chuỗi đệm giải pháp được chấp nhận.
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('-', '')
để làm cho nó trả lời câu hỏi của OP), trong khi bạn đúng với câu hỏi ban đầu của OP và nó sẽ không yêu cầu thêm bước đó. Thông minh!
Giải pháp Plain JS (ES5) mà không có bất kỳ sự cố nhảy ngày nào có thể xảy ra do in Date.toISOString () trong 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, '');
Điều này để đáp lại nhận xét của @ weberste về câu trả lời của @Pierre Guilbert.
toISOString
trả lại nhiều dấu gạch nối tiếp nhau?
// 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()
tạo một đối tượng ngày mới chỉ là một trình bao bọc xung quanh nr. của ms kể từ 1970/01/01 00: 00: 00.000 UTC. Sau đó toISOString
in ra trong múi giờ địa phương.
Một cách khác là sử dụng toLocaleDateString
với một miền địa phương có tiêu chuẩn định dạng ngày cuối lớn , chẳng hạn như Thụy Điển, Litva, Hungary, Hàn Quốc, ...:
date.toLocaleDateString('se')
Để loại bỏ các dấu phân cách ( -
) chỉ là vấn đề thay thế các chữ số không:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Điều này không có lỗi tiềm ẩn mà bạn có thể gặp phải với các định dạng ngày UTC: ngày UTC có thể được nghỉ một ngày so với ngày trong múi giờ địa phương.
Bạn chỉ có thể sử dụng mã một dòng này để lấy ngày trong năm
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Phiên bản đơn giản hóa một chút cho câu trả lời phổ biến nhất trong chủ đề này 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 là một gói rất được sử dụng.
Cách sử dụng:
Tải xuống và cài đặt dateformat
từ NPM. Yêu cầu nó trong mô-đun của bạn:
const dateFormat = require('dateformat');
và sau đó chỉ định dạng công cụ của bạn:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Anh chàng này ở đây => http://blog.stevenlevithan.com/archives/date-time-format đã viết một format()
chức năng cho JavascriptDate
đối tượng , vì vậy nó có thể được sử dụng với các định dạng theo nghĩa đen quen thuộc.
Nếu bạn cần định dạng Ngày đầy đủ tính năng trong Javascript của ứng dụng, hãy sử dụng nó. Mặt khác, nếu những gì bạn muốn làm là một cái, thì việc ghép getYear (), getMonth (), getDay () có lẽ là dễ nhất.
Làm việc từ câu trả lời của @ oo, điều này sẽ trả lại cho bạn chuỗi ngày theo chuỗi định dạng. Bạn có thể dễ dàng thêm regex năm 2 chữ số cho năm & mili giây và tương tự nếu bạn cần chúng.
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);
Tuy nhiên, tôi không biết nó hiệu quả đến mức nào, đặc biệt là rất khôn ngoan vì nó sử dụng rất nhiều regex. Nó có thể sử dụng một số công việc tôi không thành thạo js thuần túy.
Dường như mootools cung cấp Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Tôi không chắc chắn nếu nó có giá trị bao gồm chỉ cho nhiệm vụ cụ thể này.
Tôi thường sử dụng mã dưới đây khi tôi cần làm điều này.
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
Để giải thích, .slice (-2) cung cấp cho chúng ta hai ký tự cuối cùng của chuỗi.
Vì vậy, không có vấn đề gì, chúng ta có thể thêm "0" vào ngày hoặc tháng và chỉ yêu cầu hai lần cuối vì đó luôn là hai số chúng ta muốn.
Vì vậy, nếu MyDate.getMonth () trả về 9, nó sẽ là:
("0" + "9") // Giving us "09"
vì vậy việc thêm .slice (-2) vào đó sẽ cho chúng ta hai ký tự cuối cùng là:
("0" + "9").slice(-2)
"09"
Nhưng nếu date.getMonth () trả về 10, nó sẽ là:
("0" + "10") // Giving us "010"
vì vậy việc thêm .slice (-2) cho chúng ta hai ký tự cuối cùng, hoặc:
("0" + "10").slice(-2)
"10"
Nếu sử dụng AngularJs (tối đa 1,5), bạn có thể sử dụng bộ lọc ngày :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Trả lời khác cho đơn giản và dễ đọc.
Ngoài ra, việc chỉnh sửa các thành viên lớp được xác định trước bằng các phương thức mới không được khuyến khích:
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);
Làm thế nào về Day.js ?
Chỉ có 2KB, và bạn cũng có thể 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));
ngày-shortcode để giải cứu!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Đây là một cách tiếp cận chung hơn cho phép cả hai thành phần ngày và thời gian và có thể sắp xếp giống hệt nhau theo số hoặc chuỗi.
Dựa trên thứ tự số của định dạng ISO ngày, chuyển đổi thành múi giờ địa phương và xóa các chữ số không. I E:
// 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
}
Sử dụng
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"
Javascript gốc:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');