Javascript 防止字符串更改日期

Javascript 防止字符串更改日期,javascript,date,Javascript,Date,当我这样做时: 新日期('4/7/2018')。toISOString() 我得到:“2018-04-06T22:00:00.000Z” 如何在日期从7变为6的情况下获得ISO字符串?我基本上想要相同的日期、月份和年份。我认为这与机器的区域设置有关(即您在gmt+2上,因此2018年4月7日00:00:00实际上是2018-04-06T22:00:00.000Z) 您可以执行newdate('4/7/2018 GMT').toISOString()在您的年份字段中使用2018Z: var re

当我这样做时:

新日期('4/7/2018')。toISOString()

我得到:
“2018-04-06T22:00:00.000Z”


如何在日期从7变为6的情况下获得ISO字符串?我基本上想要相同的日期、月份和年份。

我认为这与机器的区域设置有关(即您在gmt+2上,因此2018年4月7日00:00:00实际上是2018-04-06T22:00:00.000Z)


您可以执行
newdate('4/7/2018 GMT').toISOString()

在您的年份字段中使用
2018Z

var res=新日期('4/7/2018Z')。toISOString();

控制台日志(res)日期字符串没有时区。对ECMA-262(ISO 8601的有限子集)中指定的格式以外的任何格式使用内置解析器取决于实现,不应使用,请参阅

有两个选项可以将字符串解析为UTC值,然后使用toISOString并删除尾随的Z,或者您可以重新格式化字符串,例如

var s='4/7/2018';
//以m/d/y格式解析字符串并返回
//ISO 8601格式
函数parseDMY(s){
var b=s.split(/\D/);
返回新的日期(Date.UTC(b[2],b[0]-1,b[1])).toISOString().slice(0,19);
}
console.log(parseDMY);
函数重新格式化日期{
var b=s.split(/\D/);

函数z(n){返回(你能解释这是为什么发生的吗?Z是什么?指定<代码> z <代码>将考虑你的本地时区,它将改变格式而没有UTC的参考时间。@ HyMalMeSimeTimes没有时区。在这种情况下,DAT.PARSE的行为完全依赖于实现,不应依赖。rs将返回一个无效的日期,其他人可能会忽略“Z”。@RobG您建议什么解决方案?好的,如果您想添加解决方案,我会接受。Rob,谢谢。您认为这是一个解决方案:
var timezoneOffset=new date().getTimezoneOffset()*60000;new date(new date('4/7/2018')-timezoneOffset.toISOString()
@HommerSmith它仍在使用内置解析器,其格式不受支持(ECMA-262)。