我有一个由用户创建的日期对象,浏览器填充时区,如下所示:
var date = new Date(2011, 05, 07, 04, 0, 0);
> Tue Jun 07 2011 04:00:00 GMT+1000 (E. Australia Standard Time)
Run Code Online (Sandbox Code Playgroud)
但是当我对它进行字符串化时,时区就会再见
JSON.stringify(date);
> "2011-06-06T18:00:00.000Z"
Run Code Online (Sandbox Code Playgroud)
在保留浏览器时区的同时获得ISO8601字符串的最好方法是使用moment.js并使用moment.format(),但当然如果我通过JSON.stringify内部使用的东西序列化整个命令(在这种情况下,AngularJS),这将无法工作)
var command = { time: date, contents: 'foo' };
$http.post('/Notes/Add', command);
Run Code Online (Sandbox Code Playgroud)
为了完整起见,我的域确实需要本地时间和偏移量.
我们的应用程序依赖于javascript(jQuery).所以有很多'application/json'请求.
我们一直在与日期挣扎一段时间,但尽管我们付出了努力,但我们无法弄清楚如何在ASP.NET MVC应用程序中处理它.
这就是我们想要的:
这是问题:
日期客户端对象始终与最终用户的时区一起使用.JSON.stringify(new Date())自动换班.
这个问题有点帮助,但我们需要记住在将日期发送到服务器之前更改日期.我们还需要记住,一旦我们做了,我们就需要转换new Date('2012-10-19T10:23:47.778Z')
我们知道JSON不知道日期,但是有一个可以解析日期的JSON.parse模拟会很好.
我们使用Newton Json.net来序列化/反序列化日期,但它在DateTimeKind.Unspecified中执行
题:
是否有一种优雅的方式来处理服务器和客户端上的日期?我们需要它作为整个应用程序中的交叉事物.
UPD:
我不得不说得更清楚.在我们的应用程序中,我们不需要考虑客户时区,因为我们只使用日期.
所以如果服务器返回2012-10-19T10:23:47.778Z',我们需要Date对象:
Fri Oct 19 2012 10:23:47 GMT+0300 (Kaliningrad Standard Time)
不
Fri Oct 19 2012 13:23:47 GMT+0300 (Kaliningrad Standard Time) (日期转移)
我确实阅读了不同的StackOverflow帖子,并且他们建议从现在开始使用.utc,但是它不起作用
注意:我在PST区域
const start = '2018-06-10T21:00:00-04:00';
const end = '2018-06-10T23:00:00-04:00';
const noconversion = moment.utc(start).format('MM/DD/YYYY');
const converted = moment(end).format('MM/DD/YYYY');
Run Code Online (Sandbox Code Playgroud)
电流输出:
noconversion-2018-06-11
转换-2018-06-11
预期输出: 06/10/2018仅从提供的日期开始获取日期