[英]Invalid Date in Firefox using .toLocaleString() as well as moment.js
我有一個試圖將UTC日期/時間轉換為本地時區的腳本。 在Chrome和IE / Edge中,這一切似乎都運行良好,但是在Firefox中顯示為“無效日期”。 堆棧上還有其他幾個問題,但似乎沒有一個可以解決我的特定需求。
我的腳本這樣做了...
獲取日期,該日期是Fabrik在Joomla中提出的特定格式。 (我對此格式幾乎沒有控制權)
它看起來像這樣:
2017-07-02 20:57
然后,我將新日期創建為UTC,並將其轉換為本地時區。
toLocalString方法:
$(document).ready(function() {
$('.plg-date > .fabrikElement > div').not('.fabrikSubElementContainer').each(function() {
if($(this).text().length > 0) {
var newdate = new Date($(this).text() + " UTC");
var options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: '2-digit',
minute: '2-digit',
timeZoneName: 'short'
}
$(this).text(newdate.toLocaleString('en-US', options));
}
})
});
moment.js方法:
$(document).ready(function() {
$('.plg-date > .fabrikElement > div').not('.fabrikSubElementContainer').each(function() {
if($(this).text().length > 0) {
var date = new Date($(this).text() + " UTC");
var newdate = moment(date).format('ddd MMM DD YYYY h:mm A')
$(this).text(newdate);
}
})
});
這兩種方法都會導致Firefox中的日期無效。 建議?
使用moment可以使用moment.utc
和local()
:
var newdate = moment.utc($(this).text()).local().format('ddd MMM DD YYYY h:mm A')
moment.utc
將您的輸入解析為UTC值,而local()
會將其轉換為本地時間。
您的格式字符串與兩個API都不匹配。 您當前正在傳遞文本( 2017-07-02 20:57
),並將UTC
附加到末尾(即2017-07-02 20:57 UTC
)。 在JavaScript控制台中:
new Date("2017-07-02 20:57");
Date 2017-07-02T19:57:00.000Z
new Date("2017-07-02 20:57 UTC")
Invalid Date
如果刪除UTC
組件,它應該可以工作。 但是請注意,javascript將20:57
轉換為19:57
。 這是因為夏時制可能在客戶端的計算機上發生。 這是否會影響您的應用程序,取決於時間戳記的來源。
至於您提供的示例,您的輸入字符串的格式字符串應為YYYY-MM-DD HH:mm
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.