解析为毫秒更改日期
Parsing to milliseconds changes date
我无法从从服务器获取的 json 解析日期。日期的格式是"YYYY-MM-dd HH-mm-ss CST"(末尾有时区),这是第一个条目:
2015-01-06 00:00:00 CST
我正在使用Highcharts来绘制数据,我需要将其解析为毫秒,以便在x轴(日期时间)中正确使用。我对 javascript 中的日期转换不是很熟悉,所以我不断得到奇怪的结果(以毫秒为单位的解析值总是错误的,因此在不正确的点上绘制图形)。
//obj['Time'] has the time value received = "2015-01-06 00:00:00 CST"
var fecha=obj['Time'].split(" ")[0].split("-"),
hora=obj['Time'].split(" ")[1].split(":")[0];
var from = Date.parse( new Date(fecha[0], fecha[1], fecha[2], hora) );
因此,我尝试了以下方法:1)直接解析obj['time']。2) 创建一个新的日期对象(存储在"from"变量中),其中包含来自"手动拆分输入日期"的显式值并对其进行解析。
console.log("Original: " + obj['Time'] );
console.log("1) " + Date.parse(obj['Time']));
console.log("2) " + from);
console.log("Response 1: " + new Date( Date.parse(obj['Time']) ) );
console.log("Response 2: " + new Date( from ) );
这些是结果:
Original: 2015-01-06 00:00:00 CST
1) 1420524000000
2) 1423177200000
Response 1: Tue Jan 06 2015 07:00:00 GMT+0100 (CET)
Response 2: Fri Feb 06 2015 00:00:00 GMT+0100 (CET)
我相信新的 Date() 正在使用我的本地时区并进行转换,因为该值的偏移量为 1 小时(GMT+0100 ???)...所以一切都有一个不应该存在的"偏移量"。也许有人可以告诉我解析此:)的正确方法是什么
谢谢!
注意:我不需要在图表中显示时区,我只需要有正确的日期时间值。
另外,我知道在创建新的Date对象时月份的0索引,这就是为什么它显示Feb而不是Jan,但是该修复程序仍然不正确
var date = "2015-01-06 00:00:00 CST".replace(/-/g, "/");
var orgDate = new Date(date);
var dateParsed = Date.parse(orgDate); //parse to timestamp. (In milliseconds)
document.write("Timestamp CST: " + dateParsed);
document.write("<br />");
document.write("<br />");
var dateToUTC = new Date(dateParsed);
document.write("UTC/GMT: " + dateToUTC.toUTCString());
document.write("<br />");
document.write("Local: " + dateToUTC.toString());
var timeStringUTC = Date.parse(new Date(dateToUTC.toUTCString()));
document.write("<br />");
document.write("<br />");
var UTCthen = orgDate.getUTCFullYear()+"-"+(parseInt(orgDate.getUTCMonth())+1 < 10 ? "0"+(parseInt(orgDate.getUTCMonth())+1) : orgDate.getUTCMonth()+1) + "-" + (orgDate.getUTCDate() < 10 ? "0"+orgDate.getUTCDate() : orgDate.getUTCDate())+"T00:00:00.000Z"
document.write("Timestamp UTC: " + Date.parse(UTCthen) );
document.write("<br />");
document.write("Difference (milliseconds): " + (dateParsed - Date.parse(UTCthen)) + " // = 6 hours"); //6 hours
不要通过拆分进行解析。只需将破折号替换为 /
.这将使它成为Date.parse
的有效日期。正如您在代码片段中看到的。日期以 CST 时间发送,转换为 UTC 向我们显示它实际上是伦敦早上六点。该示例还显示了它们之间的毫秒差异。我将解析的日期转换回其原始 UTC 时间戳。这是在这一行中完成的:
var UTCthen = orgDate.getUTCFullYear()+"-"+(parseInt(orgDate.getUTCMonth())+1 < 10 ? "0"+(parseInt(orgDate.getUTCMonth())+1) : orgDate.getUTCMonth()+1) + "-" + (orgDate.getUTCDate() < 10 ? "0"+orgDate.getUTCDate() : orgDate.getUTCDate())+"T00:00:00.000Z";
此行获取 UTC 日期,并在其"T00:00:00.000Z"之后附加时间,迫使 Date.parse 认为这是一个使用 Z
(祖鲁语)是 GMT/UTC 时间的 ISO 字符串。
因此,在UTCthen
上使用Date.parse
应该可以为您提供时间戳的规范化版本。
- 比较从函数和生成的日期对象
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何在JavaScript中延长当前日期
- 两位数的月份日期验证
- 更改angularjs中的日期-时间格式
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 将日期时间从json转换为可读格式
- NodeJS日期格式不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 使用当前日期生成随机id
- primefaces日历可以禁用过去的日期和时间吗
- 提前阅读日期
- 在JavaScript中拆分日期字符串的更好方法是什么
- 查找最短和最长日期
- 将日期和时间转换为UTC格式的日期-Javascript
- jquery日期选择器年份范围默认值
- jquery日期选择器失去了交互性
- Javascript格式UTC日期