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方法new Date()_Javascript_Date - Fatal编程技术网

Javascript方法new Date()

Javascript方法new Date(),javascript,date,Javascript,Date,如果我有以下情况: var day = '29'; var month = '12'; var year = '2015'; var created_date = new Date(year, month, year); // first var created_date = new Date(parseInt(year), parseInt(month), parseInt(year)); // second 我可以按照“第一行”中的描述创建新日期吗?或者我需要首先解析字符串中的整数,如“

如果我有以下情况:

var day = '29';
var month = '12';
var year = '2015';

var created_date = new Date(year, month, year); // first
var created_date = new Date(parseInt(year), parseInt(month), parseInt(year)); // second
我可以按照“第一行”中的描述创建新日期吗?或者我需要首先解析字符串中的整数,如“第二行所示


提前谢谢你。

你可以用两种方式来做,除非你必须在一个月内完成
-1

new Date("2015", "11", "23") // This work perfect, but it should be yy, mm, dd and not yy, mm, yy
var day = '29';
var month = '12';
var year = '2015';
var created_date = new Date(year, month-1, day);
这将正常工作


您知道,您已经在
Date()的
day
参数中输入了
year
日期的参数是:

new Date(year, month, day, hours, minutes, seconds, milliseconds);
唯一需要记住的是,一月是第0个月。
因此,如果用户为12月输入12,或为10月输入10,则减去1

另一个要记住的警告是,日期可能会意外地改变。 执行
新日期(2012,1,31)
将导致3月31日而不是2月31日(因为只有28/29天)。所以一定要做一些理智的检查

关于你的第二个问题:

Javascript是类型不安全的

“22”
输入日期对象时与
22
相同。
1==true
0==false
“1”==1==true
等。。这里和那里都有一些警告。但是通常不需要类型转换变量

1+true
=
2
“22”/4+0.5=6

等等。只有在javascript显然无法破解的情况下(例如,添加字符串编号
“22”+1
=
“221”
),才应该执行显式类型转换。或者当你需要一个数字的时候。这种情况下,字符串以数字开头,但不仅仅包含数字字符。像
“22”
将被视为数字,但
“22foo”
将被视为字符串。您需要显式地将其转换为整数才能获得数字
parseInt('22foo')
将导致
22

对用户输入进行健全性测试始终是一种很好的做法。是我期望的变量。对于整数,如果用户有机会输入其他字符,最好使用isNaN函数进行测试

您可以使用javascript的is Not A Number函数来测试字符串是否为纯字符串
isNaN('22')
将返回
false
,因为问题“它不是一个数字”的答案是否定的
isNaN('22foo')
将返回
true
。有一点关于扭曲的逻辑。我发现把这个特殊的函数作为一个问题来记住是很有用的,以保持我的理智:-)

“22foo”+2
将变成
“22foo2”
。因此,
parseInt(“22foo”)+2
将产生所需的
24
输出

var day = '29';
var month = '12';
var year = '2015';
var month1=parseInt(month)-1;
var created_date = new Date(year, month1.toString(), day); 
console.log(created_date);
var created_date1 = new Date(parseInt(year), month1, parseInt(day));
console.log(created_date1);

为了获得新的日期,这两条语句都是正确的,但格式在新的日期()内;应为yy、mm、dd类型,而不是yy、mm、yy

,月份为0索引,12月份需要
var month=11
;伙计们,我两次拼错了year,忘记了JavaScript中的月份从0开始计算。我只是想知道,它是否需要强制转换,或者我可以简单地使用字符串作为数字。月份是0索引的,所以月份12不存在。“Javascript是类型不敏感的”不是真的。在某些情况下,它会执行类型转换(在本例中,如果可以的话,字符串会转换为数字),但并不总是这样(例如
新日期(值)
如果是字符串,则不会键入转换值。
新日期('2012',true,20)
只会变成
“2012年2月20日星期一00:00:00 GMT+0100(欧洲标准时间)”
那么你的意思是什么?如果你指的是像
2012xx
这样的字符串,那将失败,但这是我回答
“22中的最后一句话“与22相同
完全错误<代码>“22”==22
返回
false
typeof“22”
返回
string
typeof 22
返回
number
。对此投了反对票。你看到我使用3个相等的运算符了吗?否==将返回true。您可以使用===测试相同的类型。这超出了答案的范围。Javascript是不区分类型的。它只是不确定什么时候是,什么时候不是,
“22”+1
将变成“221”,但
“22”/4=5.5
。这是一种非常不稳定的语言,关于变量何时何地会保留它自己的类型或它将接受什么。我在我的答案中修改了一个词,以符合你对词的纯粹解释。