小程序云函数中调用 db.serverDate() 获取的值, 如何格式化到 yyyy-mm-dd?
发布于 5 年前 作者 cuigang 13134 次浏览 来自 问答

如题,已经测试了一些方法,但都没有办法获取到想要的格式。

查看数据库给db.serverDate() 的返回值类型为 Date,以为可以调用 getFullYear() 等方法,没想到提示报错,db.serverDate(…).getFullYear is not a function

如果使用 new Date 替代 db.serverDate(),使用下面的函数可以获取到想要的格式,但是有时区问题。

function processDate(_date{
  var y = _date.getFullYear();
  var m = _date.getMonth() + 1;
  m = m < 10 ? ('0' + m) : m;
  var d = _date.getDate();
  d = d < 10 ? ('0' + d) : d;
  return y + '-' + m + '-' + d;
};

发现 db.serverDate 返回值可以准确获取正确时区(我们有个开发人员在北美,云函数中db.serverDate() 能准确获取到他那边的时区)。

谁能分享一下 db.serverDate 的格式处理方法么,谢谢

1 回复

云函数中,这样设置时区,解决了我们的问题

db.collection('all_houses').add({
    data: {
      house_title'abc',
      house_upload_date_server: processDate(new Date()),
    },
    successfunction(res{
      resolve(res);
    },
    failfunction (err{
      reject(err) 
    }
})

function processDate(date{
  date = date.toLocaleString("en-US", {timeZone"这里设置timezone"});
  date = new Date(date);
  var y = date.getFullYear();
  var m = date.getMonth() + 1;
  m = m < 10 ? ('0' + m) : m;
  var d = date.getDate();
  d = d < 10 ? ('0' + d) : d;
  var h = date.getHours();
  h=h < 10 ? ('0' + h) : h;
  var minute = date.getMinutes();
  minute = minute < 10 ? ('0' + minute) : minute;
  var second= date.getSeconds();
  second=second < 10 ? ('0' + second) : second;
  return y + '-' + m + '-' + d+' '+h+':'+minute+':'+second;
};
回到顶部