Javascript日期对象是否总是休息一天?
在我的Java脚本应用程序中,日期以如下格式存储:Javascript日期对象是否总是休息一天?,javascript,date,Javascript,Date,在我的Java脚本应用程序中,日期以如下格式存储: 2011-09-24 现在,当我尝试使用上面的值创建一个新的日期对象(这样我就可以以不同的格式检索日期)时,日期总是在一天之后返回。见下文: var doo = new Date("2011-09-24"); console.log(doo); 日志: 没关系,没有注意到GMT-0400,它导致日期是昨天 您可以尝试将默认“时间”设置为12:00:00这意味着2011-09-24 00:00:00 GMT,并且由于您在GMT-4,因此它将是
2011-09-24
现在,当我尝试使用上面的值创建一个新的日期对象(这样我就可以以不同的格式检索日期)时,日期总是在一天之后返回。见下文:
var doo = new Date("2011-09-24");
console.log(doo);
日志:
没关系,没有注意到GMT-0400,它导致日期是昨天
您可以尝试将默认“时间”设置为12:00:00这意味着
2011-09-24 00:00:00 GMT
,并且由于您在GMT-4
,因此它将是前一天的20:00
就我个人而言,我得到了
2011-09-24 02:00:00
,因为我住在GMT+2
请注意,东部夏时制是-4小时
,而你回来的日期是20小时
20h + 4h = 24h
2011年9月24日午夜。日期以UTC(GMT)为单位,因为您提供了一个只包含日期的字符串,没有任何时区指示器。如果您提供了一个不带指示器的日期/时间字符串(新日期(“2011-09-24T00:00:00”)
),它将在您的本地时区中解析。(从历史上看,这里存在不一致的情况,不仅仅是因为规范更改了不止一次,但现代浏览器应该可以;或者您可以始终包含时区指示器。)
你得到了正确的日期,只是你从来没有指定正确的时区
new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)
如果需要访问日期值,可以使用getUTCDate()
或:
我认为这与时区调整有关。您创建的日期是GMT,默认时间是午夜,但您的时区是EDT,因此它减去4小时。请尝试以下操作以验证:
var doo = new Date("2011-09-25 EDT");
你的问题与时区有关。请注意部分
GMT-0400
-即您比GMT晚4小时。如果您在显示的日期/时间上再加4小时,您将正好在2011/09/24午夜到达。使用toutString()
方法获取GMT字符串:
var doo = new Date("2011-09-24");
console.log(doo.toUTCString());
如果要获取本地时区中某个日期的0小时,请将各个日期部分传递给
date
构造函数
new Date(2011,08,24); // month value is 0 based, others are 1 based.
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
要规范化日期并消除不需要的偏移(此处测试:): 这也实现了同样的效果,并归功于@tpartee(此处测试:):
这通过我循环,在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!
//myMeeting.MeetingDate='2015-01-30T00:00:00'
var myDate=新日期(myMeeting.MeetingDate);
//转换为JavaScript日期格式
//返回1月29日THU 2015 19:0:00 GMT-0500(东部标准时间)'> P> > <强> >多个疯狂< /强>发生在JS>强>日期<强>对象的字符串转换中,例如考虑以下提供的日期
注意:以下示例可能是一天假,也可能不是一天假,具体取决于您所在的时区和当前时间
但是,如果我们将字符串格式重新排列为月-日-年
另一个奇怪的
创建新日期时,我们可以轻松更改日期“2011-09-24”中的连字符
如果我们有一个日期字符串,比如“2011-09-24T00:00:00”
现在将连字符更改为正斜杠;会发生什么
我通常需要管理日期格式2011-09-24T00:00:00,所以我就是这么做的
更新
如果为日期构造函数提供单独的参数,则可以获得其他有用的输出,如下所述
注意:参数可以是数字或字符串类型。我将展示具有混合值的示例
获取给定年份的第一个月和第一天
获取一年中的最后一个月和最后一天
数字、字符串参数的示例。请注意,月份是三月,因为又是以零为基础的月份
如果我们做同样的事情,但是一天为零,我们会得到不同的结果
向任何“年”和“月”参数中添加一天零将得到上个月的最后一天。如果你继续使用负数,你可以在另一天继续回滚
只想添加一点,显然在字符串末尾添加空格将使用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)
编辑:这不是推荐的解决方案,只是一个备选答案。请不要使用这种方法,因为不清楚发生了什么。有很多方法可能会导致错误。虽然OP的时区是EDT,但不能保证执行脚本的用户在EDT时区,因此硬编码偏移量不一定有效。我找到的解决方案拆分日期字符串,并在日期构造函数中使用单独的值
new Date(2011,08,24); // month value is 0 based, others are 1 based.
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
请注意,您必须解释另一个JS古怪之处:月份是以零为基础的。以下内容对我很有用-
var doo = new Date("2011-09-24").format("m/d/yyyy");
这可能不是一个好的答案,但我只想分享我在这个问题上的经验
var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);
<我的应用程序是全球使用UTC日期的格式YYYY-MM-DD,而DeDePikelPu插件只使用JS DATE,我很难同时考虑UTC和JS。因此,当我想将“YYYY-MM-DD”格式的日期传递给我的datepicker时,我首先使用moment.js或您喜欢的任何东西将其转换为“MM/DD/YYYY”格式,datepicker上显示的日期现在是正确的。以你为例
var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale
显然,d1是我想要的。希望这会对一些人有所帮助。不使用更多转换方法处理此问题的最佳方法
var mydate='2016,3,3';
var utcDate = Date.parse(mydate);
console.log(" You're getting back are 20. 20h + 4h = 24h :: "+utcDate);
现在只需在日期中添加GMT,也可以附加它
var mydateNew='2016,3,3'+ 'GMT';
var utcDateNew = Date.parse(mydateNew);
console.log("the right time that you want:"+utcDateNew)
Live:您使用的是ISO日期字符串格式,根据,该格式使用UTC时区构造日期:
var doo = new Date("2011-09-24 EST");
var doo = new Date("2011-09-24 00:00:00")
注意:使用日期构造函数解析日期字符串(和
由于
浏览器差异和不一致。支持RFC 2822 forma
new Date((2011 + 1), 0, 0); // The second zero roles back one day into the previous month's last day.
// => Sat Dec 31 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02");
// => Tue Mar 01 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02", 0); // Again the zero roles back from March to the last day of February.
// => Mon Feb 28 2011 00:00:00 GMT-0700 (MST)
new Date(2011, "02", -1);
// => Sun Feb 27 2011 00:00:00 GMT-0700 (MST)
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)
var dateString = "2011-09-24";
var dateParts = dateString.split("-");
var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
var doo = new Date("2011-09-24").format("m/d/yyyy");
var d = new Date('2011-09-24'); // d will be 'Fri Sep 23 2011 20:00:00 GMT-0400 (EDT)' for my lacale
var d1 = new Date('09/24/2011'); // d1 will be 'Sat Sep 24 2011 00:00:00 GMT-0400 (EDT)' for my lacale
var mydate='2016,3,3';
var utcDate = Date.parse(mydate);
console.log(" You're getting back are 20. 20h + 4h = 24h :: "+utcDate);
var mydateNew='2016,3,3'+ 'GMT';
var utcDateNew = Date.parse(mydateNew);
console.log("the right time that you want:"+utcDateNew)
var dates = price.deliveryDate.split(/-|T|:/);
var expDate = new Date(dates[0], dates[1] - 1, dates[2], dates[3], dates[4]);
var expirationDate = new Date(expDate);
var doo = new Date("2011-09-24 EST");
var doo = new Date("2011-09-24 00:00:00")
let dateForDisplayToUser =
new Date( `${YYYYMMDDdateStringSeparatedByHyphensFromAPI} 00:00:00` )
.toLocaleDateString(
'en-GB',
{ day: 'numeric', month: 'short', year: 'numeric' }
)
new Date('1993-01-20'.split('-'));
new Date('2020-05-07')
Wed May 06 2020 20:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020/05/07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-07')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-5-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-7')
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date('2020-05-07'.replace('-','/'))
Thu May 07 2020 00:00:00 GMT-0400 (Eastern Daylight Time)
new Date(Date.UTC(Year, Month, Day, Hour, Minute, Second))
Date.getUTCYear(), getUTCMonth(), getUTCDay(), getUTCHours()
process.env.TZ = 'UTC' // this has to be run before any use of dates
let format1 = "YYYY-MM-DD"
let date = new Date();
console.log(moment(date).format(format1))
var date = new Date();
//"Thu Jun 10 2021 18:46:00 GMT+0200 (Eastern European Standard Time)"
date.toString().split(/\+|-/)[0] ; // .split(/\+|-/) is a regex for matching + or -
//"Thu Jun 10 2021 18:46:00 GMT"
var date_string_as_Y_M_D = (new Date(date)).toISOString().split('T')[0];
//2021-06-10