簡體   English   中英

如何使用 mongoose 在 nodejs 中轉換日期格式

[英]How to convert date format in nodejs using mongoose

我有一個這樣的文件

{
            "_id": "5c2326cb5d558f6693577119",
            "date": "08/02/16 00:00",
            "symbol": "WLTW",
            "open": "113.300003",
            "close": 111.160004,
            "low": 110.459999,
            "high": 113.300003,
            "volume": 1200500,
            "createdAt": "2018-12-26T06:59:23.901Z",
            "updatedAt": "2018-12-26T06:59:23.901Z"
        }

我正在做這樣的查詢

const getStockBySymbol = (data) => {
    console.log('Hitting Stock Model fine!!')
    return Stock.find({symbol: data})
        .then((stocks) => {
            console.log(stocks)
            if (stocks) { return stocks }
        })
}

我需要將date格式轉換為date Year-month-date格式

所以當前格式是date屬性中的dd\\mm\\yy我想將其轉換為yyyy-mm-dd

如果有人可以提供幫助,我是 MongoDB 的新手會很棒

謝謝

您需要在獲取數據后映射結果:

const getStockBySymbol = (data) => {
    return Stock.find({symbol: data})
        .then((stocks) => {
            if (stocks) { 
            var newStocks=stocks.map(function(stock){
             let formattedDate=moment(stock.date,"dd/mm/YY hh:mm").format("YYYY-mm-dd");
             stock.date=formattedDate;
             return stock;
            });
            return newStocks;
            }
        })
}

您最好的選擇是使用 momentjs 庫。 這是時間格式轉換的簡單解決方案:

moment(new Date(date)).format('YYYY-MM-DD');

這應該產生'2016-08-02'。

您可以使用$dateFromString運算符將字符串解析為 ISODate 問題是年份的所有格式都需要四位數,因此它會將您的年份解析為0016而不是預期的2016 要解決此問題,您可以使用$dateToParts$dateFromParts並手動添加2000 然后您可以使用$dateToString將其轉換為您的格式,請嘗試:

Stockdb.aggregate([
    {
        $match: { symbol: "WLTW" }
    },
    {
        $addFields: {
            date: {
                $dateToParts: {
                    date: { $dateFromString: { dateString: "$date", format: "%d/%m/%Y %H:%M" } }
                }
            }
        }
    },
    {
        $addFields: {
            date: {
                $dateToString: {
                    date: {
                        $dateFromParts: {
                            day: "$date.day",
                            month: "$date.month",
                            year: { $add: [ 2000, "$date.year" ] }
                        }
                    },
                    format: "%Y-%m-%d"
                }
            }
        }
    }
])

$addFields在這種情況下覆蓋現有字段

編輯:對於較低的 MongoDB 版本,假設您的date具有固定長度,您可以使用$substr$concat運算符:

Stockdb.aggregate([
    {
        $match: { symbol: "WLTW" }
    },
    {
        $addFields: {
            date: {
                $concat: [
                    '20',
                    { $substr: [ "$date", 6, 2 ] },
                    '-',
                    { $substr: [ "$date", 3, 2 ] },
                    '-',
                    { $substr: [ "$date", 0, 2 ] },
                ]
            }
        }
    }
])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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