Próbuję użyć JS, aby przekształcić date object
łańcuch znaków w YYYYMMDD
format. Czy istnieje prostszy sposób niż łączenie Date.getYear()
, Date.getMonth()
i Date.getDay()
?
Próbuję użyć JS, aby przekształcić date object
łańcuch znaków w YYYYMMDD
format. Czy istnieje prostszy sposób niż łączenie Date.getYear()
, Date.getMonth()
i Date.getDay()
?
Odpowiedzi:
Zmieniony fragment kodu, którego często używam:
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]
z .length===2
, ponieważ indekser na sznurku nie jest w pełni obsługiwana. Zobacz tę odpowiedź z powodów, dla których.
[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
var mm = (this.getMonth() + 101).toString().substring(1, 3)
Nie podobało mi się dodawanie do prototypu. Alternatywą byłoby:
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
zmiennej, możesz ją owinąć new Date
i odzyskać w jednym wierszu:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
YYYYMMDDHHmmSSsss
, więc zrobiłem to: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");
. Całkiem proste, ale należy je zamknąć.
rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Możesz użyć toISOString
funkcji:
var today = new Date();
today.toISOString().substring(0, 10);
Da ci format „rrrr-mm-dd”.
var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');
var formattedDate = moment().format('YYYYMMDD');
Jeśli nie potrzebujesz czystego rozwiązania JS, możesz użyć interfejsu użytkownika jQuery, aby wykonać następujące zadanie:
$.datepicker.formatDate('yymmdd', new Date());
Zwykle nie lubię importować zbyt wielu bibliotek. Ale interfejs jQuery jest tak przydatny, że prawdopodobnie użyjesz go gdzie indziej w swoim projekcie.
Odwiedź http://api.jqueryui.com/datepicker/, aby uzyskać więcej przykładów
Jest to pojedynczy wiersz kodu, którego można użyć do utworzenia YYYY-MM-DD
ciągu dzisiejszej daty.
var d = new Date().toISOString().slice(0,10);
toISOString()
da 2015-12-31T22: 00: 00 GMT +0 (dwie godziny wcześniej).
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');
Oprócz odpowiedzi oo chciałbym zalecić oddzielenie operacji logicznych od znaku powrotu i umieszczenie ich w postaci trójek w zmiennych.
Użyj również, concat()
aby zapewnić bezpieczne łączenie zmiennych
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)
liczb dwucyfrowych. Nie ma instrukcji „if” ani „?:”, A mniej wywołań funkcji .getX (). Jeśli nie jest trochę szybszy, jest co najmniej bardziej czytelny.
Nie lubię modyfikować rodzimych obiektów i myślę, że mnożenie jest wyraźniejsze niż wypełnianie łańcucha akceptowanym rozwiązaniem.
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('-', '')
aby odpowiedzieć na pytanie PO), podczas gdy ty byłeś wierny oryginalnemu pytaniu PO i nie wymagałoby to dodatkowego kroku. Świetny!
Proste rozwiązanie JS (ES5) bez problemów z przeskokiem daty spowodowanych drukowaniem Date.toISOString () w 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, '');
To w odpowiedzi na komentarz @ weberste do odpowiedzi @Pierre Guilbert.
toISOString
zwrócić wiele kolejnych łączników?
// 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()
tworzy nowy obiekt daty, który jest tylko opakowaniem wokół nr. ms od 1970/01/01 00: 00: 00.000 UTC. Następnie toISOString
drukuje w lokalnej strefie czasowej.
Innym sposobem jest użycie toLocaleDateString
z ustawieniami regionalnymi, które mają standard formatu daty big-endian , takich jak Szwecja, Litwa, Węgry, Korea Południowa ...:
date.toLocaleDateString('se')
Aby usunąć ograniczniki ( -
), wystarczy zastąpić cyfry:
console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );
Nie ma to potencjalnego błędu, jaki można uzyskać przy formatach dat UTC: data UTC może być o jeden dzień wolna w porównaniu z datą w lokalnej strefie czasowej.
Możesz po prostu użyć tego kodu jednego wiersza, aby uzyskać datę w roku
var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();
Trochę uproszczona wersja najpopularniejszej odpowiedzi w tym wątku 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 to bardzo używany pakiet.
Jak używać:
Pobierz i zainstaluj dateformat
z NPM. Wymagaj tego w swoim module:
const dateFormat = require('dateformat');
a następnie po prostu sformatuj swoje rzeczy:
const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');
Ten facet tutaj => http://blog.stevenlevithan.com/archives/date-time-format napisał format()
funkcję dla Date
obiektu Javascript , więc można go używać ze znanymi formatami literalnymi.
Jeśli potrzebujesz w pełni funkcjonalnego formatowania daty w JavaScript aplikacji, użyj go. W przeciwnym razie, jeśli to, co chcesz zrobić, jest jednorazowe, to połączenie getYear (), getMonth (), getDay () jest prawdopodobnie najłatwiejsze.
Praca z odpowiedzią @ oo zwróci ciąg daty zgodnie z ciągiem formatu. Możesz łatwo dodać 2-cyfrowy regex roku na rok i milisekundy i taki, jeśli ich potrzebujesz.
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);
Nie wiem jednak, jak to jest wydajne, szczególnie perfekcyjnie, ponieważ wykorzystuje wiele wyrażeń regularnych. Prawdopodobnie przydałby się trochę pracy, której nie opanowałem czystego js.
Wygląda na to, że mootools zapewnia Date().format()
: https://mootools.net/more/docs/1.6.0/Types/Date
Nie jestem jednak pewien, czy warto uwzględnić tylko to konkretne zadanie.
Zwykle używam poniższego kodu, gdy muszę to zrobić.
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
Aby to wyjaśnić, .slice (-2) podaje nam dwa ostatnie znaki ciągu.
Bez względu na wszystko, możemy dodać „0” do dnia lub miesiąca i po prostu poprosić o dwa ostatnie, ponieważ zawsze są to dwa, których chcemy.
Jeśli więc MyDate.getMonth () zwróci 9, będzie to:
("0" + "9") // Giving us "09"
więc dodanie .slice (-2) daje nam ostatnie dwa znaki, które są:
("0" + "9").slice(-2)
"09"
Ale jeśli date.getMonth () zwróci 10, będzie to:
("0" + "10") // Giving us "010"
więc dodanie .slice (-2) daje nam dwa ostatnie znaki lub:
("0" + "10").slice(-2)
"10"
Jeśli używasz AngularJs (do 1.5), możesz użyć filtra daty :
var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
Odpowiadając innym za prostotę i czytelność.
Ponadto nie zaleca się edytowania istniejących predefiniowanych elementów klasy za pomocą nowych metod:
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);
Co powiesz na Day.js ?
To tylko 2 KB i ty też możesz dayjs().format('YYYY-MM-DD')
.
Jeśli nie masz nic przeciwko dołączeniu dodatkowej (ale małej) biblioteki, Sugar.js zapewnia wiele fajnych funkcji do pracy z datami w JavaScript. Aby sformatować datę, użyj funkcji formatowania :
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));
data-shortcode na ratunek!
const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
Oto bardziej ogólne podejście, które pozwala zarówno na komponenty daty, jak i godziny , i jest identycznie sortowalne jako liczba lub ciąg.
Na podstawie kolejności numerów w formacie Data ISO przekonwertuj na lokalną strefę czasową i usuń cyfry. to znaczy:
// 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
}
Stosowanie
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"
Natywny JavaScript:
new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');