首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >toDateString()递减我的日期

toDateString()递减我的日期
EN

Stack Overflow用户
提问于 2013-07-31 08:25:34
回答 3查看 11.9K关注 0票数 11

以获取以下代码:

代码语言:javascript
运行
复制
var d = new Date("2013-07-01");
console.log(d.toDateString());

它输出了2013年的孙俊30,比输入的少了一天。对象发生了什么?实际存储的日期是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-31 08:28:03

日期被解析为UTC日期,但toDateString()会输出本地时区中的该时间。

试试这个吧

代码语言:javascript
运行
复制
var d = new Date(2013, 6, 1); //6 instead of 7 because the mont argument is  zero-based
console.log(d.toDateString());

实际存储的日期是什么?

2013-07-01 00:00:00 UTC

票数 10
EN

Stack Overflow用户

发布于 2013-07-31 09:07:33

根据所使用的浏览器/运行时的不同,从字符串解析Date可能会产生不同的结果。有一个a chart here列出了一些浏览器及其支持的内容。

但通常情况下,像"2013-07-01"这样的字符串被视为在协调世界时的午夜。

如果你想在本地时间解析它,你可以使用"2013/07/01"。但这有点奇怪。你可能很想使用"07/01/2013",但这可能会被解释为1月7日或7月1日。其中任何一个仍然是特定于实现的。

如果你想要一个通用的,“无处不在”的解决方案,你有几个不同的选择:

选项1

不要解析它。使用接受整数的构造函数。

代码语言:javascript
运行
复制
var d = new Date(2013,6,1);    // watch out for the zero-based month
console.log(d.toDateString());

// output:  "Mon Jul 01 2013"

使用此代码,实际存储的UTC时间将根据您自己的时区而有所不同。但既然.toDateString()也会考虑到这段时间,那么你应该没问题。

选项2

将其解析为UTC,并显示为UTC/GMT:

代码语言:javascript
运行
复制
var d = new Date("2013-07-01");
console.log(d.toUTCString());

// output:  "Mon, 01 Jul 2013 00:00:00 GMT"

但是这个输出可能比您期望的要多,并且在不同的浏览器中看起来可能会有所不同。

选项3

使用moment.js库,您可以在其中精确地控制所需的格式。

代码语言:javascript
运行
复制
var m = moment("2013-07-01", "YYYY-MM-DD");  // explicit input format
console.log(m.format("ddd MMM DD YYYY"));    // explicit output format

// output:  "Mon Jul 01 2013"

我想,这是最好的解决方案。但是它确实需要你使用库。

票数 8
EN

Stack Overflow用户

发布于 2014-04-04 13:19:35

选项4

这种方法效果很好,不需要第三方库。

代码语言:javascript
运行
复制
    var parts ='2013-07-01'.split('-');
    var mydate = new Date(Date.UTC(parts[0],parts[1]-1,parts[2])); //please put attention to the month
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17959660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档