gpt4 book ai didi

javascript - MomentJS 时区 - 本地输入时间至 GMT+2

转载 作者:行者123 更新时间:2023-12-01 03:41:06 25 4
gpt4 key购买 nike

我正在尝试使用 MomentJS 时区将用户输入的时间从本地时间转换为 GMT+1,但是,我以前从未使用过这个库,而且文档让我很困惑。

我的表单使用 Bootstrap Datepicker 和 Bootstrap timepicker 创建一个用于输入事件日期和时间的 UI,如下所示:

    <label>Date:</label>
<input type="text" id="dteDay">
<input type="hidden" id="iptDate">
<label>Time (GMT+1 only):</label>
<input id="iptTime" type="text">

<script>
$("#dteDay").datepicker({
format: "dd/mm/yyyy",
todayBtn: "linked",
todayHighlight: true,
startDate: "-2d",
endDate: "+0d",
});


$('#iptTime').timepicker({
minuteStep: 5,
showMeridian: false
});
</script>

然后我使用此函数收集日期和时间以发送到 PHP 文件,如下所示:

function CreateReport(){        
if( $("#sltMyName").select2("val") == null ){
ShowError("Please Enter Your Name!");
}
else if( $("#sltTheirName").select2("val") == null ){
ShowError("Please Enter Their Name!");
}
else if( $("#dteDay").val() == "" ){
ShowError("Please Enter the Date of Incident!");
}
else if( $("#iptTime").val() == "" ){
ShowError("Please Enter the Time of Incident!");
}
else if( $("#txtStory").val() == "" ){
ShowError("Please Enter the Full Story!");
}
else if( $("#txtEvidence").val() == "" ){
ShowError("Please List your Evidence");
}
else{
if( $("#sltOffence").val() == "Other" && $("#iptOtherOffence").val() == ""){
ShowError("Please Enter Offence");
}
else if( $("#sltOffence").val() == "Other" ){
var Offence = $("#iptOtherOffence").val();
}
else{
var Offence = $("#sltOffence").val();
}
$.post(
'includes/complaint/index.php',
{
Server: $("#sltServerRegion").val(),
MyName: JSON.stringify($("#sltMyName").select2("val")),
TheirName: JSON.stringify($("#sltTheirName").select2("val")),
Date: $("#dteDay").val(),
Time: $("#iptTime").val(),
Offence: Offence,
Story: $("#txtStory").val(),
Evidence: $("#txtEvidence").val(),
RefundAmount: $("#iptRefundAmount").val(),
RefundPreference: $("#sltRefundPreference").val()
},
function(data){
returnValue = JSON.parse(data);
if( returnValue["data"] == 1){
window.location.href = returnValue["url"];
}
else{
ShowError(returnValue["msg"]);
}
}
);
}
}

我需要做的是将输入的时间更改为 GMT+1(或者最好在夏天为 GMT+2)以匹配我们其他系统使用的时间。

我知道使用 MomentJS 时区,您可以将日期转换为特定时区,如下所示:

var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
newYork.format(); // 2014-06-01T12:00:00-04:00

虽然我不太明白。它将它从什么(即 GMT+1)转换为 New_York?

简而言之,如何将用户输入的时间从本地时间转换为 GMT+1(或者在夏季如果可能的话为 GMT+2),然后将它们拆分以传递给 AJAX 函数?

提前致谢。

最佳答案

要将本地时间转换为固定的 UTC 偏移量,您根本不需要时刻时区插件。您可以使用 Moment.js 本身来完成此操作。例如:

var m = moment("2017-01-01 00:00:00");    // input is local time
m.utcOffset('+01:00'); // convert to UTC+1
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string

但是,由于您要求从本地时间转换为在 UTC+1 和 UTC+2 之间切换以实现夏令时的时区,因此您确实必须使用 moment-timezone。但首先,您必须为目的地选择正确的时区 - 并非每个在 +1 和 +2 之间切换的时区都在同一天或同一时间进行。不要随意挑选一个。可以找到它们的列表 here .

其中一个时区是欧洲/巴黎,它使用欧盟 DST 规则从 UTC+1 (CET) 切换到 UTC+2 (CEST)

var m = moment("2017-01-01 00:00:00");    // input is local time
m.tz('Europe/Paris'); // convert to UTC+1
var s = m.format("YYYY-MM-DD HH:mm:ss"); // output string

此外,在您的问题中,您询问了示例是从什么转换而来的。它根本没有转换 - 它将输入视为 America/New_York 时间。由于您想在本地时间开始,因此您不会使用 moment.tz(...) 来构造时刻,而是使用 .tz(...) code> 改为在现有的本地时刻。

还有一件事 - 另一个答案建议更改默认时区。这实际上并不能解决你的问题。事实上,它会阻止您实现您所描述的目标 - 因为这样您的所有输入都将被视为该时区内的时间,而不是用户计算机的本地时区。

关于javascript - MomentJS 时区 - 本地输入时间至 GMT+2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43878986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com