Nodejs 如何把mongodb中Date日期值转换成本地日期值?
Nodejs 如何把mongodb中Date日期值转换成本地日期值?
大家好, 我现在用mongodb的date格式,用node.js取出json数据,再通过httpclient传到android端,但我在 android端通过jsonObject.getString(“datename”)得到的数据是:2014-01-15T07:14:57.340Z ,比实际值少了8小时,我知道是时区问题,请问一般怎么处理这个问题。 谢谢!
谢谢,我要研究一下。 真的挺奇怪的,如果直接从node中查询后用console.log()输出,是这样正确的结果: Wed Jan 15 2014 15:14:57 GMT+0800 (China Standard Time),好像console会自动转换时区的。 但当字符串返回到android,用jsonObject取出来就又是Isodate格式了。
如果android端的原生应用,搜一下关键字"iso 8601 format java"应该有的吧 如果是android端的webview应用,moment也是可以的吧
用了一个函数来处理下: <pre><code> public static String toDateStringFromIso(String sdate) { if (“null”.equals(sdate) || “NULL”.equals(sdate) || “”.equals(sdate) || sdate == null) { return “”; } Date d1 = null; try { d1 = dateFormaterIsodate.get().parse(sdate); sharecalendar.setTime(d1); sharecalendar.set(Calendar.HOUR_OF_DAY,sharecalendar.get(Calendar.HOUR_OF_DAY)+8); d1=sharecalendar.getTime(); } catch (Exception e) { e.printStackTrace(); return “”; } return dateFormater4.get().format(d1); } </code></pre>
我都用 moment 在前端做,無痛轉換本地時間 管他+8, +9都好
在Node.js中,从MongoDB获取的Date
对象默认是以UTC时间存储的。当您通过HTTP客户端传递这些日期值到Android端时,由于不同的时区设置,可能会出现时间偏差。为了将UTC时间转换为本地时间,可以在Node.js端进行日期格式化处理。
以下是一个简单的示例,展示如何在Node.js中将MongoDB中的UTC时间转换为本地时间:
const MongoClient = require('mongodb').MongoClient;
const moment = require('moment-timezone');
async function getLocalDateFromMongo() {
const uri = "your_mongodb_connection_string";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });
try {
await client.connect();
const database = client.db("your_database_name");
const collection = database.collection("your_collection_name");
// 假设我们有一个名为"events"的集合,其中包含一个名为"eventDate"的日期字段
const result = await collection.findOne({});
// 将MongoDB的日期字段转换为本地时间
const utcDate = result.eventDate;
const localDate = moment(utcDate).tz("Asia/Shanghai").format("YYYY-MM-DD HH:mm:ss");
console.log(localDate);
} catch (err) {
console.error(err.stack);
} finally {
await client.close();
}
}
getLocalDateFromMongo();
解释
-
安装依赖: 首先需要安装
moment-timezone
库,用于处理日期时区转换。npm install moment-timezone
-
连接数据库: 使用
MongoClient
连接到MongoDB数据库,并选择对应的集合。 -
查询数据: 查询MongoDB中的一条记录(本例假设查询结果中包含名为
eventDate
的日期字段)。 -
日期转换:
- 使用
moment
库获取UTC时间。 - 使用
.tz()
方法指定目标时区(例如:“Asia/Shanghai”),将其转换为本地时间。 - 使用
.format()
方法格式化日期输出。
- 使用
这样,在将日期传递给Android客户端之前,您已经确保了日期值是正确的本地时间。