拍卖结束日期MEAN堆栈

时间:2017-04-30 18:52:51

标签: javascript angularjs date time mean-stack

我正在建立一个带有MEAN堆栈的拍卖网站,以进行培训。理解一件事我没有什么问题。我以格式"" 2017-04-30T22:10:52.360Z"格式存储截止日期。对于DB中的每个产品。在前端,我使用此功能显示今天的日期和结束日期之间的差异(类似于"剩余30天和#34;)

          $scope.days =function (date) {
           var today = new Date();
           var dd = today.getDate();
           var mm = today.getMonth() + 1; //January is 0!
           var yyyy = today.getFullYear();
           if (dd < 10) {
            dd = '0' + dd
            }
           if (mm < 10) {
            mm = '0' + mm
              }
           today = yyyy + '/' + mm + '/' + dd;
           $scope.today = today;
           var date2 = new Date(today);
           var date1 = new Date(date);
           var timeDiff =(date1.getTime() - date2.getTime());
           $scope.dayDifference =((timeDiff / (1000 * 3600 * 24))-1);
            return $scope.dayDifference;
              }
           });

显然我在html文件中传递了另一个日期。 我的问题是:如果我做这样的事情,拍卖会在世界不同的时间关闭,因为今天的日期(和时间)在意大利和美国是不同的。或者我错了? 我知道,momentjs,但我想知道是否存在一种方法来修改前端的角度函数来修复这个bug。类似于:如果我从美国加入该网站,它会将该日期转换为我的时区(服务器)

1 个答案:

答案 0 :(得分:1)

如果日期字符串是ISO 8601扩展格式,如“2017-04-30T22:10:52.360Z”,那么比IE 8更新的浏览器可以使用内置的解析器解析它。此外,默认情况下,Date方法会调整主机时区偏移量,以便获得剩余的天数,您可以解析ISO字符串并获得与用户当前日期的差异(以毫秒为单位),然后转换为天数(或任何适合的单位),例如

/* Return the difference in days between supplied string date
** and host current date
** @param {string} s - Date string in ISO 8601 format, e.g. 2017-04-05T23:00:00Z
** @returns {number/string} if s is a valid date string, returns days between current host date and supplied date
**                          if s is an invalid date string, returns "Invalid date string"
*/
function daysRemaining(isoString) {
  var d = new Date(isoString);
  if (isNaN(d)) return 'Invalid date string';
  return (d - new Date()) / 8.64e7;
}

var s = '2017-05-30T22:10:52.360Z';

console.log('Days remaining: ' + daysRemaining(s).toFixed(2));

如果日期字符串不是精确的ISO 8601格式,则某些浏览器可能会解析它而其他浏览器则不会解析它。此外,如果不是上述ISO格式,有些人可能会将其视为UTC,有些则视为本地格式,因此请注意这一点。

您可能想要整天,或转换为天,小时和分钟。

请注意,IE 8及更早版本不会解析ISO格式的日期字符串,也不会解析某些其他浏览器的旧版本。