Saya mencoba menggunakan JS untuk mengubah date object
string menjadi YYYYMMDD
format. Apakah ada cara yang lebih mudah daripada concatenating Date.getYear()
, Date.getMonth()
dan Date.getDay()
?
Saya mencoba menggunakan JS untuk mengubah date object
string menjadi YYYYMMDD
format. Apakah ada cara yang lebih mudah daripada concatenating Date.getYear()
, Date.getMonth()
dan Date.getDay()
?
Jawaban:
Bagian kode yang diubah yang sering saya gunakan:
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]
dengan .length===2
, karena pengindeks pada string tidak sepenuhnya didukung. Lihat jawaban ini untuk alasan mengapa.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
Saya tidak suka menambahkan prototipe. Alternatifnya adalah:
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
variabel di sekitar, Anda dapat membungkus new Date
dan mengembalikan semuanya dalam satu baris:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, jadi saya melakukan ini: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Cukup sederhana, tetapi harus dikemas.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Anda dapat menggunakan toISOString
fungsi ini:
var today = new Date();
today.toISOString().substring(0, 10);
Ini akan memberi Anda format "yyyy-mm-dd".
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Jika Anda tidak memerlukan solusi JS murni, Anda dapat menggunakan jQuery UI untuk melakukan pekerjaan seperti ini:
$.datepicker.formatDate('yymmdd', new Date());
Saya biasanya tidak suka mengimpor terlalu banyak perpustakaan. Tapi jQuery UI sangat berguna, Anda mungkin akan menggunakannya di tempat lain di proyek Anda.
Kunjungi http://api.jqueryui.com/datepicker/ untuk contoh lebih lanjut
Ini adalah satu baris kode yang dapat Anda gunakan untuk membuat YYYY-MM-DD
string tanggal hari ini.
var d = new Date().toISOString().slice(0,10);
toISOString()
akan memberikan 2015-12-31T22: 00: 00 GMT +0 (dua jam sebelumnya).
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');
Selain jawaban oo saya ingin merekomendasikan memisahkan operasi logika dari kembali dan menempatkan mereka sebagai variabel dalam variabel sebagai gantinya.
Juga, gunakan concat()
untuk memastikan gabungan variabel yang aman
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)
untuk mendapatkan angka berdasarkan dua digit. Tidak ada pernyataan "jika" atau "?:", Dan lebih sedikit panggilan ke fungsi .getX (). Jika tidak sedikit lebih cepat, setidaknya lebih mudah dibaca.
Saya tidak suka memodifikasi objek asli, dan saya pikir perkalian lebih jelas daripada string padding solusi yang diterima.
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('-', '')
untuk membuatnya menjawab pertanyaan OP), sedangkan Anda benar dengan pertanyaan asli OP dan itu tidak akan memerlukan langkah ekstra. Luar biasa!
Solusi Plain JS (ES5) tanpa masalah lompatan tanggal yang mungkin disebabkan oleh pencetakan Date.toISOString () di 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, '');
Ini sebagai tanggapan atas komentar @ weberste pada jawaban @Pierre Guilbert.
toISOString
mengembalikan beberapa tanda hubung berurutan?
// 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()
membuat objek tanggal baru yang hanya membungkus nr. ms sejak 1970/01/01 00: 00: 00.000 UTC. Kemudian toISOString
dicetak di zona waktu lokal.
Cara lain adalah menggunakan toLocaleDateString
dengan lokal yang memiliki standar format tanggal big-endian , seperti Swedia, Lithuania, Hongaria, Korea Selatan, ...:
date.toLocaleDateString('se')
Untuk menghapus pembatas ( -
) hanya masalah mengganti non-digit:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Ini tidak memiliki potensi kesalahan yang bisa Anda dapatkan dengan format tanggal UTC: tanggal UTC mungkin satu hari libur dibandingkan dengan tanggal di zona waktu lokal.
Anda cukup menggunakan kode satu baris ini untuk mendapatkan tanggal dalam setahun
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Versi sedikit disederhanakan untuk jawaban paling populer di utas ini 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 adalah paket yang sangat digunakan.
Cara Penggunaan:
Unduh dan instal dateformat
dari NPM. Perlu dalam modul Anda:
const dateFormat = require('dateformat');
dan kemudian format saja barang-barang Anda:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Orang ini di sini => http://blog.stevenlevithan.com/archives/date-time-format menulis format()
fungsi untuk JavascriptDate
, sehingga dapat digunakan dengan format literal yang sudah dikenal.
Jika Anda membutuhkan pemformatan Tanggal berfitur lengkap di Javascript aplikasi Anda, gunakan itu. Kalau tidak, jika yang ingin Anda lakukan adalah salah satu, maka gabungkan getYear (), getMonth (), getDay () mungkin paling mudah.
Bekerja dari jawaban @ oo, ini akan memberi Anda kembali string tanggal sesuai dengan string format. Anda dapat dengan mudah menambahkan regex tahun 2 digit untuk tahun & milidetik dan sejenisnya jika Anda membutuhkannya.
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);
Saya tidak tahu seberapa efisien itu, terutama karena ia menggunakan banyak regex. Mungkin bisa menggunakan beberapa pekerjaan yang tidak saya kuasai js murni.
Tampaknya mootool menyediakan Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Saya tidak yakin apakah itu layak termasuk hanya untuk tugas khusus ini sekalipun.
Saya biasanya menggunakan kode di bawah ini ketika saya perlu melakukan ini.
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
Untuk menjelaskan, .slice (-2) memberi kita dua karakter terakhir dari string.
Jadi, apa pun yang terjadi, kita dapat menambahkan "0" pada hari atau bulan, dan hanya meminta dua terakhir karena mereka selalu dua yang kita inginkan.
Jadi jika MyDate.getMonth () mengembalikan 9, itu akan menjadi:
("0" + "9") // Giving us "09"
jadi menambahkan .slice (-2) pada yang memberi kita dua karakter terakhir yaitu:
("0" + "9").slice(-2)
"09"
Tetapi jika date.getMonth () mengembalikan 10, itu akan menjadi:
("0" + "10") // Giving us "010"
jadi menambahkan .slice (-2) memberi kita dua karakter terakhir, atau:
("0" + "10").slice(-2)
"10"
Jika menggunakan AngularJs (hingga 1,5) Anda dapat menggunakan filter tanggal :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Menjawab orang lain untuk Kesederhanaan & keterbacaan.
Juga, mengedit anggota kelas yang sudah ada sebelumnya dengan metode baru tidak dianjurkan:
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);
Bagaimana dengan Day.js ?
Ini hanya 2KB, dan Anda juga bisa 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));
kode tanggal untuk penyelamatan!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Berikut ini adalah pendekatan yang lebih umum yang memungkinkan komponen tanggal dan waktu dan dapat diurutkan secara identik sebagai angka atau string.
Berdasarkan urutan nomor format ISO Tanggal, konversikan ke zona waktu lokal dan hapus non-digit. yaitu:
// 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
}
Pemakaian
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 Asli:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');