JavaScript'in Ay ve Tarihini 2 haneli olarak nasıl edinebilirim?


Yanıtlar:


812
("0" + this.getDate()).slice(-2)

tarih ve benzeri için:

("0" + (this.getMonth() + 1)).slice(-2)

ay için.


86
Harika, ama: function addZ(n){return n<10? '0'+n:''+n;}biraz daha genel.
RobG

9
dilim zekidir, ancak basit bir karşılaştırmadan çok daha yavaştır: jsperf.com/slice-vs-comparison
dak

30
@dak: Peki bu ne zaman gerçekçi olacak? Ayı saniyede binlerce kez hesapladığınızdan şüpheliyim.
Sasha Chedygov

2
@ KasperHoldum– getMonthve getDatedizeler yerine dönüş numaraları. Dizelerle uyumluluk gerekiyorsa, '0' + Number(n)işi yapar.
RobG

9
@Sasha Chedygov özellikle sıralıyorsanız ayı saniyede binlerce kez hesaplayabileceğinizden emin olun
Dexygen

87

"YYYY-AA-GGTHY: dd: ss" gibi bir biçim istiyorsanız, bu daha hızlı olabilir:

var date = new Date().toISOString().substr(0, 19);
// toISOString() will give you YYYY-MM-DDTHH:mm:ss.sssZ

Veya yaygın olarak kullanılan MySQL datetime biçimi "YYYY-AA-GG SS: dd: ss":

var date2 = new Date().toISOString().substr(0, 19).replace('T', ' ');

Umarım bu yardımcı olur


1
Bu, karşılaştığım en ters çözüm. Burada tek sorun saat dilimi farkıdır.
Dua

3
Saat dilimi ofseti aşağıdaki gibi bir şeyle halledilebilir: var date = new Date (new Date (). GetTime () - new Date (). GetTimezoneOffset () * 60 * 1000) .toISOString (). Substr (0,19) . değiştirin ('T', '');
Dua

Dua et, kodun benim için çalışıyor, ama kopyala ve yapıştır bazı gizli karakter veya bir şey vardı, bu yüzden sadece el yazdım.
spacebread

Bu soruyu bu kesin problemi çözmeye çalıştım, böylece ortaya çıktığı gibi cevabım ihtiyacım olan şeydi.
Mühendis Tost

Bu yöntemin UTC saat dilimine göre tarih ve saati döndüreceğini unutmayın.
Amr

41

Ay için örnek:

function getMonth(date) {
  var month = date.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}  

DateNesneyi bu işlevle de genişletebilirsiniz :

Date.prototype.getMonthFormatted = function() {
  var month = this.getMonth() + 1;
  return month < 10 ? '0' + month : '' + month; // ('' + month) for string result
}

4
GetMonth'un 1 ile 12 arasında değil, 0 ile 11 arasında bir sayı döndürdüğünü unutmayın.
Salman A

4
Bu tutarsız sonuçlar döndürür. Kasım ve Aralık aylarında bir dize ve diğer aylar için bir sayı döndürür.
Tim Down

Salman uygulamak için kodu güncelledim 1 yerine getMonth sıfır tabanlı bir uyarı Ve bir dize her zaman döndürülmesini sağlamak için tırnak eklendi.
Jan Derk

23

Bunu yapmanın en iyi yolu kendi basit biçimlendiricinizi oluşturmaktır (aşağıdaki gibi):

getDate()ayın gününü döndürür (1-31 arası)
getMonth()ayı döndürür (0-11 arası) < sıfır tabanlı, 0 = Ocak, 11 = Aralık
getFullYear() yılı döndürür (dört basamaklı) < kullanmagetYear()

function formatDateToString(date){
   // 01, 02, 03, ... 29, 30, 31
   var dd = (date.getDate() < 10 ? '0' : '') + date.getDate();
   // 01, 02, 03, ... 10, 11, 12
   var MM = ((date.getMonth() + 1) < 10 ? '0' : '') + (date.getMonth() + 1);
   // 1970, 1971, ... 2015, 2016, ...
   var yyyy = date.getFullYear();

   // create the format you want
   return (dd + "-" + MM + "-" + yyyy);
}

20

Neden kullanmıyorsunuz padStart?

var dt = new Date();

year  = dt.getYear() + 1900;
month = (dt.getMonth() + 1).toString().padStart(2, "0");
day   = dt.getDate().toString().padStart(2, "0");

console.log(year + '/' + month + '/' + day);

Ay veya gün 10'dan küçük olsa bile bu her zaman 2 basamaklı sayı döndürür.

Notlar:

  • Js kodu kullanarak transpiled, bu sadece Internet Explorer ile çalışacak Babel .
  • getYear()1900 yılından döner ve gerektirmez padStart.
  • getMonth() 0 ile 11 arasında bir ay döndürür.
    • 1'den 12'ye kadar tutmak için dolgudan önceki aya 1 eklenir
  • getDate() 1 ile 31 arasında günü döndürür.
    • 7. gün geri döner 07ve bu nedenle dizeyi doldurmadan önce 1 eklememiz gerekmez.

1
Evet. Yukarıdaki MDN bağlantısına dahildir. Aktarmak için babil kullanıyorsanız, sorun yaşamamalısınız.
SomeGuyOnAComputer

10

Aşağıdaki, üçlü operatör kullanarak db2 tarih biçimini, yani YYYY-AA-GG dönüştürmek için kullanılır

var currentDate = new Date();
var twoDigitMonth=((currentDate.getMonth()+1)>=10)? (currentDate.getMonth()+1) : '0' + (currentDate.getMonth()+1);  
var twoDigitDate=((currentDate.getDate())>=10)? (currentDate.getDate()) : '0' + (currentDate.getDate());
var createdDateTo = currentDate.getFullYear() + "-" + twoDigitMonth + "-" + twoDigitDate; 
alert(createdDateTo);

7

Bunu yapardım:

var d = new Date('January 13, 2000');
var s = d.toLocaleDateString('en-US', { month: '2-digit', day: '2-digit', year: 'numeric' });
console.log(s); // prints 01/13/2000


6
function monthFormated(date) {
   //If date is not passed, get current date
   if(!date)
     date = new Date();

     month = date.getMonth();

    // if month 2 digits (9+1 = 10) don't add 0 in front 
    return month < 9 ? "0" + (month+1) : month+1;
}

6

Başka bir örnek, neredeyse bir astar.

var date = new Date();
console.log( (date.getMonth() < 9 ? '0': '') + (date.getMonth()+1) );


5
function monthFormated() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}

5

Biraz zaman ayırabilseydim, almak istiyordum:

YYYYMMDD

Bugün için ve ile anlaştık:

const dateDocumentID = new Date()
  .toISOString()
  .substr(0, 10)
  .replace(/-/g, '');

2
Cevap temiz. İçin DD/MM/YY, gittimnew Date().toISOString().substr(0, 10).split('-').reverse().map(x => x.substr(0, 2)).join('/')
Max Ma

4

Bu benim çözümümdü:

function leadingZero(value) {
  if (value < 10) {
    return "0" + value.toString();
  }
  return value.toString();
}

var targetDate = new Date();
targetDate.setDate(targetDate.getDate());
var dd = targetDate.getDate();
var mm = targetDate.getMonth() + 1;
var yyyy = targetDate.getFullYear();
var dateCurrent = leadingZero(mm) + "/" + leadingZero(dd) + "/" + yyyy;


3

Bir cevap değil ama burada bir değişkende istediğim tarih biçimini nasıl alacağım

function setDateZero(date){
  return date < 10 ? '0' + date : date;
}

var curr_date = ev.date.getDate();
var curr_month = ev.date.getMonth() + 1;
var curr_year = ev.date.getFullYear();
var thisDate = curr_year+"-"+setDateZero(curr_month)+"-"+setDateZero(curr_date);

Bu yardımcı olur umarım!


2

MDN'den ipucu :

function date_locale(thisDate, locale) {
  if (locale == undefined)
    locale = 'fr-FR';
  // set your default country above (yes, I'm french !)
  // then the default format is "dd/mm/YYY"

  if (thisDate == undefined) {
    var d = new Date();
  } else {
    var d = new Date(thisDate);
  }
  return d.toLocaleDateString(locale);
}

var thisDate = date_locale();
var dayN = thisDate.slice(0, 2);
var monthN = thisDate.slice(3, 5);
console.log(dayN);
console.log(monthN);

http://jsfiddle.net/v4qcf5x6/


2

new Date().getMonth() yöntemi ayı sayı olarak döndürür (0-11)

Bu işlevle kolayca doğru ay numarasını alabilirsiniz.

function monthFormatted() {
  var date = new Date(),
      month = date.getMonth();
  return month+1 < 10 ? ("0" + month) : month;
}

1
function GetDateAndTime(dt) {
  var arr = new Array(dt.getDate(), dt.getMonth(), dt.getFullYear(),dt.getHours(),dt.getMinutes(),dt.getSeconds());

  for(var i=0;i<arr.length;i++) {
    if(arr[i].toString().length == 1) arr[i] = "0" + arr[i];
  }

  return arr[0] + "." + arr[1] + "." + arr[2] + " " + arr[3] + ":" + arr[4] + ":" + arr[5]; 
}

1

Ve burada başka bir sürüm https://jsfiddle.net/ivos/zcLxo8oy/1/ , faydalı olmayı umuyoruz.

var dt = new Date(2016,5,1); // just for the test
var separator = '.';
var strDate = (dt.getFullYear() + separator + (dt.getMonth() + 1) + separator + dt.getDate());
// end of setup

strDate = strDate.replace(/(\b\d{1}\b)/g, "0$1")

1

Buradaki cevaplar yardımcı oldu, ancak bundan daha fazlasına ihtiyacım var: varsayılan bir ad için sadece ay, tarih, ay, saat ve saniye değil.

İlginç bir şekilde, her şeyden önce "0" başlığına ihtiyaç duyulmasına rağmen, "+ 1" diğerleri için değil, sadece ay için gerekliydi.

Örnek olarak:

("0" + (d.getMonth() + 1)).slice(-2)     // Note: +1 is needed
("0" + (d.getHours())).slice(-2)         // Note: +1 is not needed

0

Çözümüm:

function addLeadingChars(string, nrOfChars, leadingChar) {
    string = string + '';
    return Array(Math.max(0, (nrOfChars || 2) - string.length + 1)).join(leadingChar || '0') + string;
}

Kullanımı:

var
    date = new Date(),
    month = addLeadingChars(date.getMonth() + 1),
    day = addLeadingChars(date.getDate());

jsfiddle: http://jsfiddle.net/8xy4Q/1/


0
var net = require('net')

function zeroFill(i) {
  return (i < 10 ? '0' : '') + i
}

function now () {
  var d = new Date()
  return d.getFullYear() + '-'
    + zeroFill(d.getMonth() + 1) + '-'
    + zeroFill(d.getDate()) + ' '
    + zeroFill(d.getHours()) + ':'
    + zeroFill(d.getMinutes())
}

var server = net.createServer(function (socket) {
  socket.end(now() + '\n')
})

server.listen(Number(process.argv[2]))

0

u getDate () işlevinin tarihi 1 yerine 01 olarak döndürmesini istiyorsanız, bunun kodu şöyledir ... Bugünün tarihinin 01-11-2018 olduğunu varsayalım

var today = new Date();
today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + today.getDate();      
console.log(today);       //Output: 2018-11-1


today = today.getFullYear()+ "-" + (today.getMonth() + 1) + "-" + ((today.getDate() < 10 ? '0' : '') + today.getDate());
console.log(today);        //Output: 2018-11-01

0

Böyle bir şey yapmak istedim ve yaptığım şey bu

ps üstte doğru cevap (lar) olduğunu biliyorum, ama sadece burada kendi bir şey eklemek istedim

const todayIs = async () =>{
    const now = new Date();
    var today = now.getFullYear()+'-';
    if(now.getMonth() < 10)
        today += '0'+now.getMonth()+'-';
    else
        today += now.getMonth()+'-';
    if(now.getDay() < 10)
        today += '0'+now.getDay();
    else
        today += now.getDay();
    return today;
}

çok fazla çaba. Öyle değil mi?
ahmednawazbutt

0

Eğer kontrol edeceğiz ise 10'dan küçük , bunun için yeni bir işlev oluşturmak için değil. Köşeli parantez içine bir değişken atayın ve üçlü işleçle döndürün.

(m = new Date().getMonth() + 1) < 10 ? `0${m}` : `${m}`

0
currentDate(){
        var today = new Date();
        var dateTime =  today.getFullYear()+'-'+
                        ((today.getMonth()+1)<10?("0"+(today.getMonth()+1)):(today.getMonth()+1))+'-'+
                        (today.getDate()<10?("0"+today.getDate()):today.getDate())+'T'+
                        (today.getHours()<10?("0"+today.getHours()):today.getHours())+ ":" +
                        (today.getMinutes()<10?("0"+today.getMinutes()):today.getMinutes())+ ":" +
                        (today.getSeconds()<10?("0"+today.getSeconds()):today.getSeconds());        
            return dateTime;
},

0

Moment adlı farklı bir kütüphane kullanmanızı öneririm https://momentjs.com/

Bu şekilde tarihi, fazladan iş yapmanıza gerek kalmadan doğrudan biçimlendirebilirsiniz

const date = moment().format('YYYY-MM-DD')
// date: '2020-01-04'

Kullanabilmek için anı da içe aktardığınızdan emin olun.

yarn add moment 
# to add the dependency
import moment from 'moment' 
// import this at the top of the file you want to use it in

Umarım bu yardımcı olur: D


1
Moment.js zaten önerildi; ancak tavsiyeleriniz hala eksiksiz ve kullanışlıdır.
iND

0
$("body").delegate("select[name='package_title']", "change", function() {

    var price = $(this).find(':selected').attr('data-price');
    var dadaday = $(this).find(':selected').attr('data-days');
    var today = new Date();
    var endDate = new Date();
    endDate.setDate(today.getDate()+parseInt(dadaday));
    var day = ("0" + endDate.getDate()).slice(-2)
    var month = ("0" + (endDate.getMonth() + 1)).slice(-2)
    var year = endDate.getFullYear();

    var someFormattedDate = year+'-'+month+'-'+day;

    $('#price_id').val(price);
    $('#date_id').val(someFormattedDate);
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.