Biçiminde date object
bir dize açmak için JS kullanmaya çalışıyorum YYYYMMDD
. Artarda daha kolay bir yolu var mı Date.getYear()
, Date.getMonth()
ve Date.getDay()
?
Biçiminde date object
bir dize açmak için JS kullanmaya çalışıyorum YYYYMMDD
. Artarda daha kolay bir yolu var mı Date.getYear()
, Date.getMonth()
ve Date.getDay()
?
Yanıtlar:
Sık sık kullandığım kod parçası:
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]
ile .length===2
bir dize üzerinde bir dizin tam desteklenmediği için. Nedeni için bu cevaba bakınız.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
Prototife eklemeyi sevmedim. Bir alternatif:
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
Değişkenin etrafında ihtiyacınız yoksa, new Date
hepsini tek bir satırda (new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
Bunu yapan, böylece: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Oldukça basit, ancak kapsüllenmelidir.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
toISOString
İşlevi kullanabilirsiniz :
var today = new Date();
today.toISOString().substring(0, 10);
Size bir "yyyy-aa-gg" biçimi verecektir.
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Saf bir JS çözümüne ihtiyacınız yoksa, işi bu şekilde yapmak için jQuery UI kullanabilirsiniz:
$.datepicker.formatDate('yymmdd', new Date());
Genellikle çok fazla kütüphane almak istemiyorum. Ancak jQuery kullanıcı arayüzü çok kullanışlı, muhtemelen projenizde başka bir yerde kullanacaksınız.
Daha fazla örnek için http://api.jqueryui.com/datepicker/ adresini ziyaret edin
Bu, YYYY-MM-DD
bugünün tarihinin bir dizesini oluşturmak için kullanabileceğiniz tek bir kod satırıdır .
var d = new Date().toISOString().slice(0,10);
toISOString()
2015-12-31T22: 00: 00 GMT +0 (iki saat önce) verecektir.
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'nun cevabına ek olarak, mantık işlemlerini dönüşten ayırmayı ve bunları değişkenlere üçlü olarak koymayı tavsiye ederim.
Ayrıca, concat()
değişkenlerin güvenli birleştirmesini sağlamak için kullanı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)
İki basamaklı sayıları elde etmek için kullanıyorum . "İf" veya "?:" İfadesi ve .getX () işlevine daha az çağrı yoktur. Biraz daha hızlı değilse, en azından daha okunabilir.
Yerel nesneleri değiştirmeyi sevmiyorum ve çarpmanın kabul edilen çözümü doldurma dizesinden daha net olduğunu düşünüyorum.
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'nin orijinal sorusuna sadık kaldığınızda ve bu ekstra adımı gerektirmeyecek şekilde ayırıcıları kullandığım için ( OP'nin sorusuna cevap vermek için bir şey yapmam gerekirdi ) çalışır. Mükemmel!
UTC'de Date.toISOString () baskısının neden olabileceği herhangi bir tarih atlama sorunu olmayan Düz JS (ES5) çözümü:
var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');
Bu @ weberste'nin @Pierre Guilbert'in cevabı hakkındaki yorumuna yanıt olarak.
toISOString
birden ardışık tire dönmek?
// 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()
yeni bir tarih nesnesi oluşturur. 1970/1/01 00: 00: 00.000 UTC'den beri ms. Ardından toISOString
yerel saat diliminde yazdırılır.
Başka bir yol, İsveç, Litvanya, Macaristan, Güney Kore gibi büyük-endian tarih formatı standardınatoLocaleDateString
sahip bir yerel ayarla kullanmaktır :
date.toLocaleDateString('se')
Sınırlayıcıları kaldırmak için (-
) yalnızca rakam olmayanları değiştirmekle ilgilidir:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Bu, UTC tarih biçimleriyle alabileceğiniz olası bir hataya sahip değildir: UTC tarihi, yerel saat dilimindeki tarihe göre bir gün kapalı olabilir.
Yıl içindeki tarihi almak için bu tek satır kodunu kullanabilirsiniz.
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Bu konudaki en popüler cevap için biraz basitleştirilmiş sürüm 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 çok kullanılan bir pakettir.
Nasıl kullanılır:
dateformat
NPM'den indirin ve yükleyin . Modülünüzde gerekli kılın:
const dateFormat = require('dateformat');
ve sonra sadece dosyalarınızı biçimlendirin:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Buradaki adam => http://blog.stevenlevithan.com/archives/date-time-formatformat()
Javascriptler için bir işlev yazdıDate
nesnesi , böylece tanıdık değişmez biçimlerle kullanılabilir.
Uygulamanızın Javascript'inde tam özellikli Tarih biçimlendirmesine ihtiyacınız varsa bunu kullanın. Aksi takdirde, yapmak istediğiniz şey bir kapalı ise, getYear (), getMonth (), getDay () 'i bitiştirmek muhtemelen en kolaydır.
@ Oo'nun cevabından çalışmak, tarih dizesini bir biçim dizesine göre geri verecektir. Gerekirse yıl ve milisaniye için 2 basamaklı bir yıl regex'i kolayca ekleyebilirsiniz.
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);
Ne kadar verimli olduğunu bilmiyorum, özellikle çok akıllıca çünkü regex çok kullanıyor. Muhtemelen saf js usta değilim bazı işleri kullanabilirsiniz.
Görünüşe göre mootools Date().format()
şunları sağlar : https://mootools.net/more/docs/1.6.0/Types/Date
Sadece bu özel görev için dahil etmeye değer olup olmadığından emin değilim.
Bunu yapmak gerektiğinde genellikle aşağıdaki kodu kullanıyorum.
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
Açıklamak için, .slice (-2) bize dizenin son iki karakterini verir.
Ne olursa olsun, güne veya aya "0" ekleyebiliriz ve sadece son ikisini sorabiliriz, çünkü bunlar her zaman istediğimiz ikidir.
MyDate.getMonth () 9 döndürürse, şöyle olur:
("0" + "9") // Giving us "09"
yani .slice (-2) eklemek bize son iki karakteri verir:
("0" + "9").slice(-2)
"09"
Ancak date.getMonth () 10 döndürürse, şöyle olacaktır:
("0" + "10") // Giving us "010"
yani .slice (-2) eklemek bize son iki karakteri verir veya:
("0" + "10").slice(-2)
"10"
AngularJ'ler (1,5'e kadar) kullanıyorsanız tarih filtresini kullanabilirsiniz :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Sadelik ve okunabilirlik için bir başkasına cevap vermek.
Ayrıca, önceden tanımlı mevcut sınıf üyelerinin yeni yöntemlerle düzenlenmesi önerilmez:
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);
Day.js hakkında ne dersiniz ? ?
Sadece 2KB ve ayrıca dayjs().format('YYYY-MM-DD')
.
Ek (ancak küçük) bir kitaplık eklemenin sakıncası yoksa, Sugar.js , JavaScript'te tarihlerle çalışmak için birçok güzel işlevsellik sağlar . Bir tarihi formatlamak için format fonksiyonunu kullanın :
new Date().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));
kurtarmaya tarih kısa kodu !
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
İşte hem tarih hem de saat bileşenlerine izin veren ve sayı veya dize olarak aynı şekilde sıralanabilir daha genel bir yaklaşım .
Tarih ISO biçiminin sayı sırasına göre, yerel bir saat dilimine dönüştürün ve rakam olmayanları kaldırın. yani:
// 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
}
kullanım
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"
Yerel Javascript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');