簡體   English   中英

使用.toLocaleString()和moment.js的Firefox中的無效日期

[英]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.utclocal()

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM