在 javascript 中获取没有时间的日期 ISO 字符串
Get date ISO string without time in javascript
有没有一种方法可以在 javascript 中获取新日期类型的 ISO 字符串,时间是午夜,而无需重建带有日期部分的新日期或格式化它?
我一直在努力this
var date = new Date();
date.setHours(0, 0, 0, 0);
document.write(date.toISOString());
我得到了这个
2017-04-20T04:00:00.000Z
我想要这个
2017-04-20T00:00:00.000Z
是否有内置函数或方法,如我一直尝试做的那样,以获得所需的输出(使用日期部分重建日期对象)?
只需使用 setUTCHours
而不是 setHours
并补偿时区:
var date = new Date();
var timezoneOffset = date.getMinutes() + date.getTimezoneOffset();
var timestamp = date.getTime() + timezoneOffset * 1000;
var correctDate = new Date(timestamp);
correctDate.setUTCHours(0, 0, 0, 0);
document.write(correctDate.toISOString())
setHours
将设置您当地时区的时间,但当您显示它时,它会显示 UTC 时间。如果你一开始就设置为UTC,你会得到你想要的结果。
编辑:
请注意,如果您比 UTC 早 ,您的日期将存储为前一天的 UTC 日期,因此 运行 setUTCHours
不会按预期工作,将您的日期更改为前一天的午夜。因此,您首先需要将时区偏移量添加到日期。
var isoDate = new Date().toISOString().substring(0,10);
console.log(isoDate);
如果您可以依赖伟大的 momentjs.com 库,它会像这样简单:
moment().format('YYYY-MM-DD');
或
moment().toISOString();
如果您希望您的代码在逻辑上持久,基于硬编码索引的子字符串永远不会安全:
var iso = date.toISOString();
iso = iso.substring(0, iso.indexOf('T'));
import {format} from "date-fns-tz"
format(new Date(), 'yyyy-MM-dd')
有没有一种方法可以在 javascript 中获取新日期类型的 ISO 字符串,时间是午夜,而无需重建带有日期部分的新日期或格式化它?
我一直在努力this
var date = new Date();
date.setHours(0, 0, 0, 0);
document.write(date.toISOString());
我得到了这个
2017-04-20T04:00:00.000Z
我想要这个
2017-04-20T00:00:00.000Z
是否有内置函数或方法,如我一直尝试做的那样,以获得所需的输出(使用日期部分重建日期对象)?
只需使用 setUTCHours
而不是 setHours
并补偿时区:
var date = new Date();
var timezoneOffset = date.getMinutes() + date.getTimezoneOffset();
var timestamp = date.getTime() + timezoneOffset * 1000;
var correctDate = new Date(timestamp);
correctDate.setUTCHours(0, 0, 0, 0);
document.write(correctDate.toISOString())
setHours
将设置您当地时区的时间,但当您显示它时,它会显示 UTC 时间。如果你一开始就设置为UTC,你会得到你想要的结果。
编辑:
请注意,如果您比 UTC 早 ,您的日期将存储为前一天的 UTC 日期,因此 运行 setUTCHours
不会按预期工作,将您的日期更改为前一天的午夜。因此,您首先需要将时区偏移量添加到日期。
var isoDate = new Date().toISOString().substring(0,10);
console.log(isoDate);
如果您可以依赖伟大的 momentjs.com 库,它会像这样简单:
moment().format('YYYY-MM-DD');
或
moment().toISOString();
如果您希望您的代码在逻辑上持久,基于硬编码索引的子字符串永远不会安全:
var iso = date.toISOString();
iso = iso.substring(0, iso.indexOf('T'));
import {format} from "date-fns-tz"
format(new Date(), 'yyyy-MM-dd')