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中显示准确的日期,而不考虑时区_Javascript_Date - Fatal编程技术网

在JavaScript中显示准确的日期,而不考虑时区

在JavaScript中显示准确的日期,而不考虑时区,javascript,date,Javascript,Date,我正在写一些简单的代码来显示一些朋友的生日。我将生日存储在一个JSON文件中,并将其拉入并初始化为日期对象,如下所示: birthday: new Date(p.birthday) 然后我使用moment来显示这些日期,如下所示: let formatted = moment(birthdayDate).format(BirthdayFormat); 这将应用一个自动的本地时区,可能是从我设置初始日期对象时开始的,并且根据一天中的时间,可能会将日期推迟几个小时,从而将日期更改为前一天,因为它

我正在写一些简单的代码来显示一些朋友的生日。我将生日存储在一个JSON文件中,并将其拉入并初始化为日期对象,如下所示:

birthday: new Date(p.birthday)
然后我使用moment来显示这些日期,如下所示:

let formatted = moment(birthdayDate).format(BirthdayFormat);
这将应用一个自动的本地时区,可能是从我设置初始日期对象时开始的,并且根据一天中的时间,可能会将日期推迟几个小时,从而将日期更改为前一天,因为它默认为午夜


基本上,我只想在任何时候显示不变的日期,因为它只是说明那个人的生日和时区根本不相关。我在其他地方使用它作为日期,因此我不想将它以格式化的形式存储在JSON中,那么如何设置它,使其只确认日期而不针对时区进行调整?

将日期转换为日期字符串,以便日期不包含特定于时区的值

birthday: new Date(p.birthday).toDateString()
然后用momentjs显示

let formatted = moment(birthdayDate).format(BirthdayFormat);

根据您的评论,日期为YYYY-MM-DD格式。不幸的是,ECMAScript将这些日期解析为UTC

如果日期已被解析为UTC,则只需向用户显示UTC值。您可以使用momentjs的utc函数(我想这是它的主要用途之一):

//内置解析器将YYYY-MM-DD视为UTC
设d=新日期('2020-12-30');
//m继承相同的时间值,“UTC”也是
设m=力矩(d);
//在格式中包含小时H,以便稍后显示utc设置的效果
让birthdayFormat='dddddd,D-MMMM,YYYY[at]H';
//默认为本地时区,H反映本地偏移
//日期可能是29或30,具体取决于偏移量分别是-还是+
log('Local:'+m.format(birthdayFormat));
//切换UTC开关,所有输出现在将是UTC,而不是本地
m、 utc();
//值现在是UTC,所以偏移量为零,H也是
//为所有用户显示2020年12月30日星期三0
console.log('UTC:'+m.format(birthdayFormat))

Hmm这仍然是最终结果中的调整日期:
const birthdayString=birthdayDate.toDateString()
let formatted=moment(birthdayString).format(BirthdayFormat)
@muttley91你能试试看吗?
const birthdayString=p.birthday;设formatted=moment(birthdayString).format(BirthdayFormat)
@muttley91 p.birthday的值是多少?p.birthday是一个类似这样的字符串:
“1985-10-03”
,但它们在代码中的不同位置,因此当它到达格式化部分时,已经是一个日期了。