Bir dize belirterek bir dizeyi javascript'teki bir tarih saati nesnesine nasıl dönüştürebilirim?
Gibi bir şey arıyorum:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Bir dize belirterek bir dizeyi javascript'teki bir tarih saati nesnesine nasıl dönüştürebilirim?
Gibi bir şey arıyorum:
var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Yanıtlar:
Bunun size yardımcı olabileceğini düşünüyorum: http://www.mattkruse.com/javascript/date/
getDateFromFormat()
Sorununuzu çözmek için biraz ayarlayabileceğiniz bir işlev var.
Güncelleme: Örneklerin güncellenmiş bir sürümü var javascripttoolbox.com
TypeError: Object Date has no method 'getDateFromFormat'
Dizeniz ile uyumluysa kullanın . Biçiminiz uyumsuzsa (sanırım öyle), dizeyi kendiniz ayrıştırmalısınız (normal ifadelerle kolay olmalı) ve yıl, ay, tarih, saat, dakika ve saniye için açık değerlerle yeni bir Date nesnesi oluşturmanız gerekir .new Date(dateString)
Date.parse()
@Christoph Sorunu çözmek için bir normal ifade kullanarak bahseder. İşte ne kullanıyorum:
var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString);
var dateObject = new Date(
(+dateArray[1]),
(+dateArray[2])-1, // Careful, month starts at 0!
(+dateArray[3]),
(+dateArray[4]),
(+dateArray[5]),
(+dateArray[6])
);
Hiçbir şekilde akıllı değildir, sadece normal ifadeyi yapılandırın ve new Date(blah)
ihtiyaçlarınıza uyacak şekilde yapılandırın .
Düzenleme: Belki yıkım kullanarak ES6'da biraz daha anlaşılır:
let dateString = "2010-08-09 01:02:03"
, reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
, [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
, dateObject = new Date(year, month-1, day, hours, minutes, seconds);
Ama bu günlerde dürüstlükle, Moment gibi bir şeye ulaşıyorum
/g
yalnızca sonradan ayarlamak lastIndex
için bayrağı kullanıyorsunuz 0
? Sadece küresel bir maç kullanmayın.
/g
Varolan bir projeden özensiz bir kopyala / yapıştırdı. lastindex
bir editör tarafından eklendi ( \g
sanırım savaşmak için mi?). Şimdi onları kaldıracağım. Bunu işaret ettiğiniz için teşekkür ederim.
JavaScript'te gelişmiş tarih / saat biçimlendirme yordamı yoktur.
Biçimlendirilmiş tarih çıktısı için harici bir kütüphane kullanmanız gerekecek , Flagrant Badassery'den "JavaScript Tarih Biçimi" çok umut verici görünüyor.
Girdi dönüşümü için zaten birkaç öneri yapılmıştır. :)
Moment.js'ye göz atın . JavaScript'in sıkıntılı Tarih işlevlerini (veya bunların eksikliğini) oluşturan modern ve güçlü bir kütüphanedir.
Sadece burada güncellenmiş bir cevap için, http://www.datejs.com/ adresinde iyi bir js lib var
Datejs, ayrıştırma, biçimlendirme ve işleme için açık kaynaklı bir JavaScript Tarih kütüphanesidir.
var temp1 = "";
var temp2 = "";
var str1 = fd;
var str2 = td;
var dt1 = str1.substring(0,2);
var dt2 = str2.substring(0,2);
var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);
var yr1 = str1.substring(6,10);
var yr2 = str2.substring(6,10);
temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;
var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);
var date1 = new Date(cfd);
var date2 = new Date(ctd);
if(date1 > date2) {
alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}
Dış kütüphane bir ya da iki tarihi ayrıştırmak için aşırıya kaçıyor, bu yüzden Oli ve Christoph'un çözümlerini kullanarak kendi işlevimi yaptım . Burada orta Avrupa'da nadiren aything kullanıyoruz, ancak OP formatı, bu yüzden burada kullanılan basit uygulamalar için yeterli olmalı.
function ParseDate(dateString) {
//dd.mm.yyyy, or dd.mm.yy
var dateArr = dateString.split(".");
if (dateArr.length == 1) {
return null; //wrong format
}
//parse time after the year - separated by space
var spacePos = dateArr[2].indexOf(" ");
if(spacePos > 1) {
var timeString = dateArr[2].substr(spacePos + 1);
var timeArr = timeString.split(":");
dateArr[2] = dateArr[2].substr(0, spacePos);
if (timeArr.length == 2) {
//minutes only
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
} else {
//including seconds
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
}
} else {
//gotcha at months - January is at 0, not 1 as one would expect
return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
}
}
Date.parse()
oldukça zekidir ancak formatın doğru ayrıştırılacağını garanti edemem.
Değilse, bu iki köprü arasında bir şey bulmak gerekir. Örneğiniz oldukça basittir (yalnızca sayılardır), bu nedenle string.split()
bazılarıyla eşleştirilmiş REGEX (hatta daha hızlı olabilir) dokunuşu parseInt()
hızlı bir şekilde tarih oluşturmanıza olanak tanır.
time = "2017-01-18T17:02:09.000+05:30"
t = new Date(time)
hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);
t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec
Sadece 5 sentimi vermek için.
Tarih biçimim gg.aa.yyyy (İngiltere biçimi) ve yukarıdaki örneklerin hiçbiri benim için çalışmıyor. Tüm ayrıştırıcılar mm'yi gün, gg'yi ay olarak görüyordu.
Bu kütüphaneyi buldum: http://joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ ve işe yaradı, çünkü böyle alanların sırasını söyleyebilirsiniz:
>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)
Umarım birine yardım eder.
Moment.js bunu ele alacaktır:
var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;
Bunun için moment.js kütüphanesini kullanabilirsiniz. Sadece zamana özel çıktı almak için kullanıyorum, ancak ne tür bir format seçmek istediğinizi seçebilirsiniz.
Referans:
1. moment kütüphanesi: https://momentjs.com/
2. zaman ve tarihe özel fonksiyonlar: https://timestamp.online/article/how-to-convert-timestamp-to-datetime-in-javascript
convertDate(date) {
var momentDate = moment(date).format('hh : mm A');
return momentDate;
}
ve bu yöntemi şöyle çağırabilirsiniz:
this.convertDate('2020-05-01T10:31:18.837Z');
Umut ediyorum bu yardım eder. Kodlamanın tadını çıkarın.
Date.parse dönüştürme dizesini tam olarak karşılamak için dd-mm- YYYY'yi RFC822'de belirtildiği gibi biçimlendirmek için, yyyy-aa-gg ayrıştırma kullanırsanız hatalar yapabilirsiniz.
//Here pdate is the string date time
var date1=GetDate(pdate);
function GetDate(a){
var dateString = a.substr(6);
var currentTime = new Date(parseInt(dateString ));
var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
var day =("0"+ currentTime.getDate()).slice(-2);
var year = currentTime.getFullYear();
var date = day + "/" + month + "/" + year;
return date;
}