Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中为两个不同的时间获取相同的unix时间戳_Javascript_Date_Unix_Icalendar_Unix Timestamp - Fatal编程技术网

在javascript中为两个不同的时间获取相同的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

我有两个ical格式的时间戳,我想先将它们转换为正常时间,然后再转换为unix时间

这是我用来将正常时间转换为unix时间戳的函数:

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;
}