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 safari中的日期无效_Javascript_Date_Safari - Fatal编程技术网

Javascript safari中的日期无效

Javascript safari中的日期无效,javascript,date,safari,Javascript,Date,Safari,chrome,ff对此没有问题,但safari会喊“无效日期”。为什么? 编辑:好的,根据下面的注释,我使用了字符串解析并尝试了以下方法: alert(new Date('2010-11-29')); 编辑2018年3月22日:似乎人们仍在这里登陆-今天,我将使用时刻或日期fns,并完成它。Date fns非常无痛,而且重量轻 模式yyyy-MM-dd不是Date构造函数的官方支持格式。Firefox似乎支持它,但不要指望其他浏览器也支持它 以下是一些受支持的字符串: 年月日 yyyy/M

chrome,ff对此没有问题,但safari会喊“无效日期”。为什么?

编辑:好的,根据下面的注释,我使用了字符串解析并尝试了以下方法:

 alert(new Date('2010-11-29'));

编辑2018年3月22日:似乎人们仍在这里登陆-今天,我将使用
时刻
日期fns
,并完成它。Date fns非常无痛,而且重量轻

模式
yyyy-MM-dd
不是
Date
构造函数的官方支持格式。Firefox似乎支持它,但不要指望其他浏览器也支持它

以下是一些受支持的字符串:

  • 年月日
  • yyyy/MM/dd
  • 年月日
  • 年月日
  • 年月日
似乎是解析非标准日期格式的好库

编辑:刚刚选中。引用第15.9.1.15节:

日期时间字符串格式

ECMAScript定义一个字符串 日期时间交换格式 基于ISO的简化 8601扩展格式。格式是 如下所示:YYYY-MM-DDTHH:MM:ss.sssZ 其中字段如下所示:

  • YYYY是公历中年份的小数位数
  • “-”(连字符)在字符串中出现两次
  • MM是一年中从1月1日到12月12日的月份
  • DD是一个月的第1天到第31天
  • “T”按字面意思出现在字符串中,表示 时间因素
  • HH是自午夜起已过去的完整小时数,为2 十进制数字
  • “:”(冒号)在字符串中出现两次
  • mm是从小时开始算起的完整分钟数,如 两个十进制数字
  • ss是一分钟开始后的完整秒数 作为两个十进制数字
  • “”(点)按字面意思出现在字符串中
  • sss是自启动后的完整毫秒数 第二位为三位小数。二者都 “.”和毫秒字段可能 省略
  • Z是指定为“Z”(UTC)或“+”或“-”的时区偏移量 后跟时间表达式hh:mm
此格式包括仅限日期的表格:

  • YYYY
  • YYYY-MM
  • YYYY-MM-DD
它还包括带有 附加了一个可选的时区偏移:

  • THH:mm
  • THH:mm:ss
  • THH:mm:ss.sss
还包括“日期时间”,其中 可以是上述的任意组合

因此,标准中似乎包含YYYY-MM-DD,但由于某些原因,Safari不支持它

更新:查看并使用它后,您的问题应该使用以下代码解决:

alert(new Date('11-29-2010')); //doesn't work in safari
alert(new Date('29-11-2010')); //doesn't work in safari
alert(new Date('2010-29-11')); //doesn't work in safari

尽管您可能希望浏览器支持(或只支持其中的子集),但事实并非如此。我所知道的所有浏览器(至少在我使用的美国/英国地区)都能够解析可怕的美国
MM/DD/YYYY
格式


如果您已经有了日期的部分内容,那么您可能希望尝试使用。如果您不知道,但必须使用
YYYY-MM-DD
格式,我建议使用正则表达式来解析您知道的片段,然后将它们传递到
Date.UTC()

对于我来说,仅仅因为Safari无法正确执行而实现一个新库太多了,而且正则表达式太过复杂了。 这是oneliner的

var myDate1 = Date.parseExact("29-11-2010", "dd-MM-yyyy");
var myDate2 = Date.parseExact("11-29-2010", "MM-dd-yyyy");
var myDate3 = Date.parseExact("2010-11-29", "yyyy-MM-dd");
var myDate4 = Date.parseExact("2010-29-11", "yyyy-dd-MM");

要在大多数浏览器上使用解决方案,您应该使用此格式创建日期对象

console.log (new Date('2011-04-12'.replace(/-/g, "/")));
e、 g:

适用于IE、FF、Chrome和Safari。甚至更旧的版本


我也有同样的问题。然后我使用了。问题消失了

从字符串创建力矩时,我们首先检查字符串 匹配已知的ISO 8601格式,然后返回到新日期(字符串),如果 找不到已知格式

警告:浏览器对分析字符串的支持不一致。因为 没有关于应该支持哪种格式、支持什么的规范 在某些浏览器中有效,在其他浏览器中无效

对于解析ISO 8601字符串以外的任何内容的一致结果, 您应该使用字符串+格式

例如

dateObj = new Date(2014, 6, 25); //UTC time / Months are mapped from 0 to 11
alert(dateObj.getTime()); //gives back timestamp in ms

使用“mm/dd/yyyy”格式。例如:-新日期('02/28/2015')。它适用于所有浏览器。

将字符串转换为日期fromat(您必须知道服务器时区)


其中+08:00=来自服务器的时区

我使用矩来解决问题。 比如说

new Date('2015-06-16 11:00:00'.replace(/\s+/g, 'T').concat('.000+08:00')).getTime()  

使用下面的格式,它可以在所有浏览器上工作

var startDate = moment('2015-07-06 08:00', 'YYYY-MM-DD HH:mm').toDate();
//您现在的输出是“2016年3月22日星期二18:30:00 GMT”

请注意,现在dateObj以GMT格式显示时间,还请注意日期和时间已相应更改

“toUTCSting”函数检索格林威治子午线的相应时间。它通过建立当前时区与格林威治子午线时区之间的时差来实现

在上述情况下,转换前的时间为2016年3月23日00:00分。从格林尼治标准时间+0530(IST)小时转换为格林尼治标准时间(在这种情况下,它基本上从给定的时间戳中减去5.30小时)后,时间反映了2016年3月22日的18.30小时(正好比第一次晚5.30小时)

进一步将任何日期对象转换为可以使用的时间戳

alert(dateObj.toUTCSting);
//输出将类似于“1458671400000”


这将为您提供唯一的时间戳

如何使用劫持
日期
?没有依赖关系,min+gzip=280 B

我面临着类似的问题
Date.Parse(“DATESTRING”)
在Chrome(版本59.0.3071.115)上工作,但在Safari(版本10.1.1(版本11603.2.5))上没有工作

狩猎:

alert(dateObj.getTime());
Date.parse("2017-01-22 11:57:00")
1485115020000
Date.parse("2017-01-22T11:57:00")
1485115020000
铬:

Date.parse("2017-01-22 11:57:00")
NaN
Date.parse("2017-01-22T11:57:00")
1485086220000
Date.parse("2017-01-22T11:57:00Z")
1485086220000
对我有效的解决方案是用
“T”
替换日期字符串中的空格。(示例:
dateString.rep
Date.parse("2017-01-22T11:57:00")
1485086220000
Date.parse("2017-01-22T11:57:00")
1485115020000
Date.parse("2017-01-22T11:57:00Z")
1485086220000
Date.parse("2017-01-22T11:57:00Z")
1485086220000
 <script src="https://cdn.polyfill.io/v2/polyfill.min.js?features=Intl.~locale.en"></script> 
new Date(year, month, day, hours, minutes, seconds, milliseconds)
var d = new Date(2018, 11, 24, 10, 33, 30, 0);
var date = new Date("2011-02-07");
console.log(date) // IE you get ‘NaN’ returned and in Safari you get ‘Invalid Date’
var d = new Date(2011, 01, 07); // yyyy, mm-1, dd  
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss  
var d = new Date("02/07/2011"); // "mm/dd/yyyy"  
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"  
var d = new Date(1297076700000); // milliseconds  
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC 
const dateString = '2011-11-18';
const dateObj = new Date(`${dateString}`); 
const dateObj = new Date(String(dateString)); 
const date = "2021-1-1"
const YYYY = date.split("-")[0];

    //convert M->MM i.e. 2->02
    const MM =
      date.split("-")[1].length == 1
        ? "0" + date.split("-")[1]
        : date.split("-")[1];

    //convert D->DD i.e. 2->02
    const DD =
      date.split("-")[2].length == 1
        ? "0" + date.split("-")[2]
        : date.split("-")[2];

    // YYYY-MM-DD
    const properDateString = `${YYYY + "-" + MM + "-" + DD}`;

    const dateObj = new Date(properDateString);