在javascript中为两个不同的时间获取相同的unix时间戳
我有两个ical格式的时间戳,我想先将它们转换为正常时间,然后再转换为unix时间 这是我用来将正常时间转换为unix时间戳的函数:在javascript中为两个不同的时间获取相同的unix时间戳,javascript,date,unix,icalendar,unix-timestamp,Javascript,Date,Unix,Icalendar,Unix Timestamp,我有两个ical格式的时间戳,我想先将它们转换为正常时间,然后再转换为unix时间 这是我用来将正常时间转换为unix时间戳的函数: var normal_to_unix = function (date_string) { var date = new Date(date_string); return date.getTime() / 1000; } 这个函数很好,因为日期已经是UTC,我不需要做任何转换 这是我用来将ical时间转换为unix时间的函数。在我的例子中,ic
var normal_to_unix = function (date_string) {
var date = new Date(date_string);
return date.getTime() / 1000;
}
这个函数很好,因为日期已经是UTC,我不需要做任何转换
这是我用来将ical时间转换为unix时间的函数。在我的例子中,ical时间类似于“20180603T150000Z”
现在的问题是,对于“20180603T150000Z”
和“20180603T160000Z”
,我得到的是相同的unix时间,它们应该给出不同的时间戳,这两个时间戳都是1530576000
有什么我遗漏的吗?提前谢谢
请看一下现场示例这里的几点:
该方法以美式英语的可读形式返回日期对象的日期部分。举个例子,“2018年7月3日星期二”,也许这不是你想要的
new Date
在本地时区中创建日期,如果将其与toString()
一起使用,则可以很好地使用该日期,该字符串还将返回本地时区中的日期字符串。但它会受到夏令时的影响,所以我会避免使用这种方法
另一件事我希望避免在字符串和日期之间来回转换,因为它会进行大量不必要的计算
我建议使用以下方法:
var ics_to_unix = function (ics_string) {
var year = parseInt(ics_string.slice(0, 4));
var month = parseInt(ics_string.slice(4, 6)) - 1; // Jan is 0
var date = parseInt(ics_string.slice(6, 8));
var hours = parseInt(ics_string.slice(9, 11));
var minutes = parseInt(ics_string.slice(11, 13));
var seconds = parseInt(ics_string.slice(13, 15));
return Date.UTC(year, month, date, hours, minutes, seconds) / 1000;
}
我已经添加了字符串到数字的显式转换,调整了月份以匹配javascript中使用的内容,还删除了额外的调用。但当我在控制台中尝试new Date()时,它显示的是日期2018-06-04T11:37:35.739Z,据我所知,Z表示UTC。有什么问题吗?我得到的是相同的1530576000,即使在包装成日期后也是如此。UTC()试试这个:
console.log(new Date())
-这将输出您当前的UTC日期,对我来说是2018-06-04T11:42:08.153Z
。然后再次尝试构造相同的日期:console.log(新日期(2018,6,4,11,42,08,153))
。这返回给我2018-07-04T08:42:08.153Z
-注意,由于javascript月编号,月份提前了1个,小时减少了3个,因为我在GMT+3 zoneYeah,这很奇怪,甚至在用日期结束之后。UTC(…)仍然显示2018-07-04T11:46:56.144ZI我已经注意到toDateString()
输入代码并更新答案
var ics_to_unix = function (ics_string) {
var year = parseInt(ics_string.slice(0, 4));
var month = parseInt(ics_string.slice(4, 6)) - 1; // Jan is 0
var date = parseInt(ics_string.slice(6, 8));
var hours = parseInt(ics_string.slice(9, 11));
var minutes = parseInt(ics_string.slice(11, 13));
var seconds = parseInt(ics_string.slice(13, 15));
return Date.UTC(year, month, date, hours, minutes, seconds) / 1000;
}