Mendapatkan String dalam format YYYYMMDD dari JS tanggal obyek?

I'm mencoba untuk menggunakan JS untuk mengubah sebuah objek tanggal menjadi string di YYYYMMDD format. Apakah ada cara yang lebih mudah dari concatenating Tanggal.getYear(), Tanggal.getMonth(), dan Tanggal.getDay()?

Mengomentari pertanyaan (2)
Larutan

Diubah potongan kode 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();
Komentar (9)

Aku't seperti menambahkan untuk prototipe. Alternatif akan sama:

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


document.body.innerHTML += res;
Komentar (11)

Anda dapat menggunakan toISOString fungsi :

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

Ini akan memberikan anda sebuah "yyyy-mm-dd" format.

Komentar (4)

Moment.js bisa menjadi teman anda

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

Jika anda don't perlu JS murni solusi, anda bisa menggunakan jQuery UI untuk melakukan pekerjaan seperti ini :

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

Biasanya saya don't ingin mengimpor terlalu banyak perpustakaan. Tapi jQuery UI adalah sangat berguna, anda mungkin akan menggunakannya di tempat lain dalam proyek anda.

Kunjungi http://api.jqueryui.com/datepicker/ untuk lebih banyak contoh

Komentar (0)

Ini adalah satu baris kode yang dapat anda gunakan untuk membuat YYYY-MM-DD string dari hari ini's upload.

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

Selain o-o's jawaban saya'd ingin merekomendasikan memisahkan operasi logika dari kembali dan menempatkan mereka sebagai ternaries dalam variabel-variabel sebagai gantinya.

Juga, gunakan concat() untuk memastikan aman rangkaian dari variabel-variabel

 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 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();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min);
  };

 Date.prototype.yyyymmddhhmmss = 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();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss);
  };

var d = new Date();
d.yyyymmdd();
d.yyyymmddhhmm();
d.yyyymmddhhmmss();

Sedikit lebih KERING biola seperti yang disarankan oleh RiZKiT

https://jsfiddle.net/EricHerlitz/tuhhfxz9/

Komentar (3)
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'
Komentar (2)

Saya don't seperti memodifikasi asli benda-benda, dan saya pikir perkalian jelas dari string padding solusi 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));

Biola: http://jsfiddle.net/gbdarren/Ew7Y4/

Komentar (7)

Polos JS (ES5) solusi tanpa ada mungkin saat melompat isu-isu yang disebabkan oleh Tanggal.toISOString() cetak dalam 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 respon ke @weberste's mengomentari @Pierre Guilbert's jawaban.

Komentar (7)
// 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
Komentar (3)
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

konsol.log(dateFormated);

Komentar (5)

Cara lain adalah dengan menggunakan toLocaleDateString dengan lokal yang memiliki big-endian format tanggal standar, seperti Swedia, Lithuania, Hungaria, Korea Selatan, ...:

date.toLocaleDateString('se')

Untuk menghapus pembatas (-) adalah hanya masalah mengganti non-digit:

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

Ini tidak memiliki potensi kesalahan yang bisa anda dapatkan dengan UTC tanggal format: UTC tanggal yang mungkin menjadi salah satu hari dibandingkan dengan saat ini di zona waktu lokal.

Komentar (0)

Anda hanya dapat menggunakan satu baris kode untuk mendapatkan date di tahun

var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Komentar (0)

Kode ini adalah untuk memperbaiki Pierre Guilbert's jawaban:

(ini bekerja bahkan setelah 10000 tahun)

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

Sedikit versi yang disederhanakan untuk jawaban yang paling populer di thread 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;
}
Komentar (0)

Orang ini di sini => http://blog.stevenlevithan.com/archives/date-time-format menulis format() fungsi untuk Javascript's Tanggal objek, sehingga dapat digunakan dengan akrab literal format.

Jika anda membutuhkan fitur penuh format Tanggal dalam aplikasi anda's Javascript, gunakan itu. Sebaliknya jika apa yang ingin anda lakukan adalah salah satu off, kemudian menggabungkan getYear(), getMonth(), getDay() mungkin adalah yang paling mudah.

Komentar (0)

Tampaknya bahwa mootools menyediakan Date().format(): https://mootools.net/more/docs/1.6.0/Types/Date

I'm tidak yakin jika ini layak termasuk hanya untuk tugas khusus ini meskipun.

Komentar (0)

Bekerja dari @o-o's jawaban ini akan memberikan anda kembali string tanggal sesuai dengan format string. Anda dapat dengan mudah menambahkan 2 digit tahun regex untuk tahun & milidetik dan seperti jika anda membutuhkan mereka.

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 don't tahu bagaimana efisien yang demikian, terutama perf bijaksana karena itu banyak yang menggunakan regex. Itu mungkin bisa menggunakan beberapa pekerjaan yang saya lakukan tidak master js murni.

Komentar (0)

Saya biasanya menggunakan kode di bawah ini ketika aku harus 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 dari string.

Jadi tidak peduli apa, kita dapat menambahkan "0" untuk 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 yaitu:

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

"09"

Tapi jika saat ini.getMonth() mengembalikan 10, itu akan menjadi:

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

jadi menambahkan .slice(-2) memberi kita dua karakter, atau:

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

"10"
Komentar (0)