Làm cách nào để lấy ngày có định dạng yyyy-mm-dd từ ngày ISO 8601 ?
Ngày 8601 của tôi là
2013-03-10T02:00:00Z
Làm thế nào tôi có thể nhận được những thứ sau?
2013-03-10
date.split("T")[0]
sẽ làm
Làm cách nào để lấy ngày có định dạng yyyy-mm-dd từ ngày ISO 8601 ?
Ngày 8601 của tôi là
2013-03-10T02:00:00Z
Làm thế nào tôi có thể nhận được những thứ sau?
2013-03-10
date.split("T")[0]
sẽ làm
Câu trả lời:
Thử cái này
date = new Date('2013-03-10T02:00:00Z');
date.getFullYear()+'-' + (date.getMonth()+1) + '-'+date.getDate();//prints expected format.
Cập nhật: -
Như đã chỉ ra trong các nhận xét, tôi đang cập nhật câu trả lời để in các số không ở đầu cho ngày và tháng nếu cần.
date = new Date('2013-08-03T02:00:00Z');
year = date.getFullYear();
month = date.getMonth()+1;
dt = date.getDate();
if (dt < 10) {
dt = '0' + dt;
}
if (month < 10) {
month = '0' + month;
}
console.log(year+'-' + month + '-'+dt);
Chỉ cần cắt chuỗi:
var date = new Date("2013-03-10T02:00:00Z");
date.toISOString().substring(0, 10);
Hoặc nếu bạn chỉ cần ngày ngoài chuỗi.
var strDate = "2013-03-10T02:00:00Z";
strDate.substring(0, 10);
YYYYY-MM-DD
ở năm 10000. Để tránh điều này, bạn có thể chia nhỏ T
ký tự thay thế. (Xem en.wikipedia.org/wiki/Year_10,000_problem )
Moment.js sẽ xử lý định dạng ngày tháng cho bạn. Đây là cách bao gồm nó thông qua thẻ JavaScript và sau đó là một ví dụ về cách sử dụng Moment.js để định dạng ngày.
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
moment("2013-03-10T02:00:00Z").format("YYYY-MM-DD") // "2013-03-10"
.toISODateString()
, bởi vì đó là trường hợp rất thường xuyên ...
Đây là những gì tôi làm chỉ để cập nhật:
let isoDate = "2013-03-10T02:00:00Z";
alert(isoDate.split("T")[0]);
Moment.js là thư viện khá lớn để sử dụng cho một trường hợp sử dụng duy nhất. Tôi khuyên bạn nên sử dụng date-fns
thay thế. Về cơ bản, nó cung cấp hầu hết các chức năng của Moment.js với kích thước gói nhỏ hơn nhiều và nhiều formatting options
.
import format from 'date-fns/format'
format('2013-03-10T02:00:00Z', 'YYYY-MM-DD'); // 2013-03-10, YYYY-MM-dd for 2.x
Một điều cần lưu ý là, vì đó là định dạng thời gian ISO 8601 , trình duyệt thường chuyển đổi từ giờ UTC sang múi giờ địa phương. Mặc dù đây là trường hợp sử dụng đơn giản mà bạn có thể làm được '2013-03-10T02:00:00Z'.substring(0, 10);
.
Đối với các chuyển đổi phức tạp hơn date-fns
là cách để đi.
let isoDate = "2013-03-10T02:00:00Z";
var d = new Date(isoDate);
d.toLocaleDateString('en-GB'); // dd/mm/yyyy
d.toLocaleDateString('en-US'); // mm/dd/yyyy
Chuyển ngày của bạn vào đối tượng ngày tháng:
var d = new Date('2013-03-10T02:00:00Z');
d.toLocaleDateString().replace(/\//g, '-');
Đối với tất cả những người đang sử dụng các nỗ lực phân tách, cắt lát và các nỗ lực dựa trên chuỗi khác để lấy ngày, bạn có thể tự thiết lập cho mình không thành công liên quan đến múi giờ!
Chuỗi ISO có Múi giờ Zulu và ngày theo múi giờ này, có nghĩa là, nó có thể sử dụng ngày trước hoặc muộn hơn một ngày so với múi giờ thực tế mà bạn phải tính đến trong chuỗi chuyển đổi của mình.
Xem ví dụ này:
const timeZoneRelatedDate = new Date(2020, 0, 14, 0, 0);
console.log(timeZoneRelatedDate.toLocaleDateString(
'ja-JP',
{
year: 'numeric',
month: '2-digit',
day: '2-digit'
}
).replace(/\//gi,'-'));
// RESULT: "2020-01-14"
console.log(timeZoneRelatedDate.toISOString());
// RESULT: "2020-01-13T23:00:00.000Z" (for me in UTC+1)
console.log(timeZoneRelatedDate.toISOString().slice(0,10));
// RESULT: "2020-01-13"
Nếu bạn có đối tượng ngày tháng:
let date = new Date()
let result = date.toISOString().split`T`[0]
console.log(result)
hoặc là
let date = new Date()
let result = date.toISOString().slice(0, 10)
console.log(result)
Để mở rộng giải pháp của rk rk : Trong trường hợp bạn muốn định dạng bao gồm thời gian, bạn có thể thêm toTimeString()
chuỗi vào chuỗi của mình, rồi tách phần GMT, như sau:
var d = new Date('2013-03-10T02:00:00Z');
var fd = d.toLocaleDateString() + ' ' + d.toTimeString().substring(0, d.toTimeString().indexOf("GMT"));
Tôi đã sử dụng cái này:
HTMLDatetoIsoDate(htmlDate){
let year = Number(htmlDate.toString().substring(0, 4))
let month = Number(htmlDate.toString().substring(5, 7))
let day = Number(htmlDate.toString().substring(8, 10))
return new Date(year, month - 1, day)
}
isoDateToHtmlDate(isoDate){
let date = new Date(isoDate);
let dtString = ''
let monthString = ''
if (date.getDate() < 10) {
dtString = '0' + date.getDate();
} else {
dtString = String(date.getDate())
}
if (date.getMonth()+1 < 10) {
monthString = '0' + Number(date.getMonth()+1);
} else {
monthString = String(date.getMonth()+1);
}
return date.getFullYear()+'-' + monthString + '-'+dtString
}
Nguồn: http://gooplus.fr/vi/2017/07/13/angular2-typescript-isodate-to-html-date/
var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)");
alert(d.toLocaleDateString());
let dt = new Date('2013-03-10T02:00:00Z');
let dd = dt.getDate();
let mm = dt.getMonth() + 1;
let yyyy = dt.getFullYear();
if (dd<10) {
dd = '0' + dd;
}
if (mm<10) {
mm = '0' + mm;
}
return yyyy + '-' + mm + '-' + dd;
Sử dụng mã dưới đây. Nó hữu ích cho bạn.
let currentDate = new Date()
currentDate.toISOString()