Javascript 日期时间问题 - 转换为 utc
Javascript datetime issue - converting to utc
我的数据库值是这个
2020-03-08 20:44:00
但在 javascript。它显示
Mon Mar 09 2020 09:44:00 GMT+0800 (Singapore Standard Time)
我想在 UI
上显示
2020-03-08 20:44:00
或
2020-03-08
有没有办法删除时区并仅从数据库中获取实际值。
减去您的时区偏移毫秒数。
var dt = new Date('2020-03-08 20:44:00');
dt = new Date(dt.getTime()-dt.getTimezoneOffset()*60000);
console.log(dt.toUTCString());
var mo = dt.getUTCMonth()+1, d = dt.getUTCDate(), h = dt.getUTCHours();
var m = dt.getUTCMinutes(), s = dt.getUTCSeconds();
if(mo < 10)mo = '0'+mo;
if(d < 10)d = '0'+d;
if(h < 10)h = '0'+h;
if(m < 10)m = '0'+m;
if(s < 10)s = '0'+s;
console.log(dt.getUTCFullYear()+'-'+mo+'-'+d+' '+h+':'+m+':'+s);
您正在静默使用 Date 对象的 .toString()
方法,该方法将 UTC 日期(您的数据库正在存储)转换为当前时区的时间。
如果 date
是您从数据库中获取的变量,那么您可以按照自己的意愿格式化它:
let dateString = date.toISOString().replace('T', ' ').replace(/\..+/, '')
这将获取您的日期,将其转换为 ISO 字符串(格式为 2020-01-10T03:09:24.551Z
),并将 T 替换为 space 并将小数点后的所有内容替换为空。
toISOString 不是将日期转换为 DateTime 的正确方法。请按照以下方法从 DateTime 获取日期。
var date = new Date("2020-03-08 20:44:00");
var year = date.getFullYear();
var month = (1 + date.getMonth()).toString();
month = month.length > 1 ? month : '0' + month;
var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day;
var newDate = year + '-' + month + '-' + day;
console.log("Date plush time - "+date);
console.log("Only Date - "+newDate);
试试这个。
let d = new Date('2020-03-08 20:44:00');
console.log(`${d.getFullYear()}-${d.getMonth() < 10 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1}-${d.getDate() < 10 ? '0' + (d.getDate()): d.getDate()}`);
您可以获取日期的每个部分并构建自己的格式
示例:
let formatted_date = my_date.getFullYear() + "-" + (my_date.getMonth() + 1) + "-" + my_date.getDate()
在此示例中:my_date 保留要显示的日期。
如果您可以使用图书馆,请使用 moment.js
https://momentjs.com/docs/#/displaying/
moment("2020-03-08 20:44:00").format("YYYY-MM-DD");
或
moment(new Date("2020-03-08 20:44:00")).format("YYYY-MM-DD");
它甚至可以将时间更改为 utc
https://momentjs.com/guides/#/parsing/local-utc-zone/
moment.utc("2020-03-08 20:44:00").format("YYYY-MM-DD");
希望这对您有所帮助:)
我的数据库值是这个
2020-03-08 20:44:00
但在 javascript。它显示
Mon Mar 09 2020 09:44:00 GMT+0800 (Singapore Standard Time)
我想在 UI
上显示2020-03-08 20:44:00
或
2020-03-08
有没有办法删除时区并仅从数据库中获取实际值。
减去您的时区偏移毫秒数。
var dt = new Date('2020-03-08 20:44:00');
dt = new Date(dt.getTime()-dt.getTimezoneOffset()*60000);
console.log(dt.toUTCString());
var mo = dt.getUTCMonth()+1, d = dt.getUTCDate(), h = dt.getUTCHours();
var m = dt.getUTCMinutes(), s = dt.getUTCSeconds();
if(mo < 10)mo = '0'+mo;
if(d < 10)d = '0'+d;
if(h < 10)h = '0'+h;
if(m < 10)m = '0'+m;
if(s < 10)s = '0'+s;
console.log(dt.getUTCFullYear()+'-'+mo+'-'+d+' '+h+':'+m+':'+s);
您正在静默使用 Date 对象的 .toString()
方法,该方法将 UTC 日期(您的数据库正在存储)转换为当前时区的时间。
如果 date
是您从数据库中获取的变量,那么您可以按照自己的意愿格式化它:
let dateString = date.toISOString().replace('T', ' ').replace(/\..+/, '')
这将获取您的日期,将其转换为 ISO 字符串(格式为 2020-01-10T03:09:24.551Z
),并将 T 替换为 space 并将小数点后的所有内容替换为空。
toISOString 不是将日期转换为 DateTime 的正确方法。请按照以下方法从 DateTime 获取日期。
var date = new Date("2020-03-08 20:44:00");
var year = date.getFullYear();
var month = (1 + date.getMonth()).toString();
month = month.length > 1 ? month : '0' + month;
var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day;
var newDate = year + '-' + month + '-' + day;
console.log("Date plush time - "+date);
console.log("Only Date - "+newDate);
试试这个。
let d = new Date('2020-03-08 20:44:00');
console.log(`${d.getFullYear()}-${d.getMonth() < 10 ? '0' + (d.getMonth() + 1) : d.getMonth() + 1}-${d.getDate() < 10 ? '0' + (d.getDate()): d.getDate()}`);
您可以获取日期的每个部分并构建自己的格式 示例:
let formatted_date = my_date.getFullYear() + "-" + (my_date.getMonth() + 1) + "-" + my_date.getDate()
在此示例中:my_date 保留要显示的日期。
如果您可以使用图书馆,请使用 moment.js
https://momentjs.com/docs/#/displaying/
moment("2020-03-08 20:44:00").format("YYYY-MM-DD");
或
moment(new Date("2020-03-08 20:44:00")).format("YYYY-MM-DD");
它甚至可以将时间更改为 utc
https://momentjs.com/guides/#/parsing/local-utc-zone/
moment.utc("2020-03-08 20:44:00").format("YYYY-MM-DD");
希望这对您有所帮助:)