mongoDB取日周月年

发布时间 2023-12-22 10:56:53作者: 紫蕈

1.$dateFromString字符串转时间类型

{

  $dateFromString:{

  dateString:<dateStringExpression>,   //要转化的时间字符串

  format:<formatExpression>,   //转换的格式,’%Y-%m-%dT%H:%M:%S.%LZ‘    

  timezone:<tzExpression>,   //指定时区

  onError:<onErrorExpression>,   //报错时输出

  onNull:<onNullExpression>   //null时输出

  }

}

如1:
{$dateFromString:{
        dateString:'2017-02-16T12:16:28.787'
    }
}
结果:ISODate('2017-02-16T12:16:28.787Z')

如2:
{$dateFromString:{
        dateString:'15-06-2018',
        fromat:'%d-%m-%Y'
    }
}
结果:ISODate('2018-06-15T00:00:0.000Z')

 

2.$dateToString 日期转字符串

{$dateToString:{

  dateToString:<dateExpression>,   

  format:<formatExpression>,    

  timezone:<tzExpression>,   

  onNull:<onNullExpression>   

}

 

3.周、周的第XX天

MongoDB中保存的datatime类型的数据是格林尼治时间,需要转成中国的东八区的时间。格林尼治时间如:ISODate("2023-11-22T00:00:00.000Z")

①时间保存为datatime类型

如下,此处的$datas.dt是datatime类型,$isoDayOfWeek是取ISO周的第XX天

weekDay: {
    $isoDayOfWeek: {
      date: "$datas.dt",
      timezone: "Asia/Shanghai",
    },
  }

 

②时间保存字符串类型

要先将字符串转成日期类型,再去取ISO周,如下,{"$dateFromString": {"dateString": "$data_time"}是将字符串转成日期类型,再用$isoWeek去取ISO周

isoWeek: {
    $isoWeek: {
        date: {
            "$dateFromString": {
                "dateString": "$data_time"
            }
        },
        "timezone": "Asia/Shanghai"
    }
}

 

4.月

注:data_time为字符串类型

month: {
    $substr: ['$data_time', 5, 2]
}

 

5.年

注:data_time为字符串类型

year: {
    $substr: ['$data_time', 0, 4]
}

 

6.取时段(30min和60min)

如datatime类型取时段,可先将datatime类型转成字符串,再通过字符串截取取时段

$substr: [{
    $dateToString: {
        format: '%Y-%m-%d %H:%M:%S',
        date: '$num_data.dt',
        timezone: 'Asia/Shanghai'
    }
}, 11, 5]

结果: 如2023-07-08T01:00:00.000Z  取时段为09:00

$substr: [{
    $dateToString: {
        format: '%Y-%m-%d %H:%M:%S',
        date: '$num_data.dt',
        timezone: 'Asia/Shanghai'
    }
}, 11, 2]

结果:如2023-07-08T01:00:00.000Z  取时段为09