在我的Java脚本应用程序中,我以这样的格式存储日期:
2011-09-24
现在,当我尝试使用上面的值创建一个新的Date对象(这样我就可以以不同的格式检索日期)时,日期总是返回一天。见下文:
var date = new Date("2011-09-24");
console.log(date);
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
在我的Java脚本应用程序中,我以这样的格式存储日期:
2011-09-24
现在,当我尝试使用上面的值创建一个新的Date对象(这样我就可以以不同的格式检索日期)时,日期总是返回一天。见下文:
var date = new Date("2011-09-24");
console.log(date);
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
当前回答
您可以通过将此日期转换为UTC日期
new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))
并且总是建议使用UTC(通用时区)日期,而不是使用本地时间的日期,因为默认情况下,日期以UTC存储在数据库中。因此,在整个项目中使用和解释UTC格式的日期是一个很好的实践。 例如,
Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()
因此,使用UTC日期解决了所有与时区相关的问题。
其他回答
如果你只是想确保日期的各个部分保持不变,即使我改变了时区,这个方法似乎也能奏效:
var doo = new Date("2011-09-24 00:00:00")
只要把0加进去。
在我的代码中,我这样做:
let dateForDisplayToUser =
new Date( `${YYYYMMDDdateStringSeparatedByHyphensFromAPI} 00:00:00` )
.toLocaleDateString(
'en-GB',
{ day: 'numeric', month: 'short', year: 'numeric' }
)
我在我的电脑上切换时区,日期保持不变,我从API得到的日期字符串yyyy-mm-dd。
但我是不是遗漏了什么/这是个坏主意?
*至少在chrome中。这在Safari中不起作用!撰写本文时
这个通过我循环,zzzBov的答案是+1。这是一个完整的转换日期,为我工作使用UTC方法:
//myMeeting.MeetingDate = '2015-01-30T00:00:00'
var myDate = new Date(myMeeting.MeetingDate);
//convert to JavaScript date format
//returns date of 'Thu Jan 29 2015 19:00:00 GMT-0500 (Eastern Standard Time)' <-- One Day Off!
myDate = new Date(myDate.getUTCFullYear(), myDate.getUTCMonth(), myDate.getUTCDate());
//returns date of 'Fri Jan 30 2015 00:00:00 GMT-0500 (Eastern Standard Time)' <-- Correct Date!
您可以使用时刻库来格式化日期。 https://momentjs.com/
let format1 = "YYYY-MM-DD"
let date = new Date();
console.log(moment(date).format(format1))
EDIT
时刻现在已弃用,您可以使用date-fns format方法格式化日期。
import { format } from 'date-fns'
format(new Date(), "yyyy-MM-dd")
下面的方法对我很有效
var doo = new Date("2011-09-24").format("m/d/yyyy");
只是想添加,显然在字符串末尾添加一个空格将使用UTC来创建。
new Date("2016-07-06")
> Tue Jul 05 2016 17:00:00 GMT-0700 (Pacific Daylight Time)
new Date("2016-07-06 ")
> Wed Jul 06 2016 00:00:00 GMT-0700 (Pacific Daylight Time)
编辑:这不是一个推荐的解决方案,只是一个替代答案。请不要使用这种方法,因为它非常不清楚正在发生什么。有很多种方法可以重构这个不小心导致错误。