Moment.js kullanarak doğru bir moment nesnesini zaman dilimlerine sahip bir tarih nesnesine dönüştüremiyorum. Doğru tarihi alamıyorum.
Örnek:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
Bir an nesnesini tarih nesnesine dönüştürmek için bunu kullanın:
http://momentjs.com/docs/#/displaying/as-javascript-date/ adresinden
moment().toDate();
Verim:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
moment-timezone]1 öğesini istediğiniz bölgeler için veriler ile başlattığınız sürece, kodunuz beklendiği gibi çalışır.
Anı saat dilimine doğru bir şekilde dönüştürüyorsunuz, bu da momentObj.format()
çıktısının ikinci satırında yansıtılıyor.
UTC'ye geçmek sadece ofseti düşürmez, UTC saat dilimine geri döner. Eğer bunu yapacaksanız, orijinal .tz()
çağrısına hiç ihtiyacınız yoktur. Sadece moment.utc()
yapabilirsiniz.
Belki de sadece çıktı biçimi dizesini değiştirmeye çalışıyorsunuzdur? Eğer öyleyse, sadece format
yöntemine istediğiniz parametreleri belirtin:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Kodunuzun son satırlarıyla ilgili olarak - toDate()
kullanarak bir Date
nesnesine geri döndüğünüzde, moment.js davranışından vazgeçip JavaScript'in davranışına geri dönüyorsunuz. Bir JavaScript Date
nesnesi her zaman üzerinde çalıştığı bilgisayarın yerel saat diliminde yazdırılacaktır. Bu konuda moment.js'nin yapabileceği hiçbir şey yoktur.
Birkaç küçük şey daha:
Moment kurucusu bir Date
alabilir *olsa da, genellikle en iyisi kullanmamaktır. Şimdi" için moment(new Date())
kullanmayın. Bunun yerine, sadece moment()
kullanın. Her ikisi de çalışacaktır, ancak gereksiz yere gereksizdir. Bir dizeden ayrıştırma yapıyorsanız, bu dizeyi doğrudan moment'e geçirin. Önce bir Date
olarak ayrıştırmaya çalışmayın. moment'in ayrıştırıcısının çok daha güvenilir olduğunu göreceksiniz.
MST7MDTgibi zaman dilimleri geriye dönük uyumluluk nedeniyle vardır. POSIX tarzı zaman dilimlerinden kaynaklanırlar ve sadece birkaç tanesi TZDB verilerinde yer alır. Kesinlikle gerekli olmadıkça,
America/Denver` gibi bir anahtar kullanmalısınız.
.toDate` benim için gerçekten işe yaramadı, İşte yaptığım şey:
futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))
umarım bu yardımcı olur