3

我使用来自http://tarruda.github.io/bootstrap-datetimepicker/的bootstrap-datetimepicker 这提供了选择本地时间日期时间的选项,我无法理解的是如何在将其发送到 cgi 之前将其转换为 UTC . 我需要这样做,因为我的服务器设置在 GMT 时区,并且输入可以来自任何时区。
所以我希望用户在他的 tz 中选择时间,但将该选择转换为 gmt,然后将其发送到我的 cgi 脚本。
如果有任何其他更好的方法来解决这个问题,我也会很感激。

<script type="text/javascript">
    $('#timetime').datetimepicker({
        maskInput: true,
        format: 'yyyy-MM-dd hh:mm',
    });
</script>

它以下面代码的形式被调用

<label for="sdate" class="control-label">* Scheduled Date (UTC/GMT)</label>
<div id="timetime" class="controls">
    <input id="sdate" name="sdate" type="text" placeholder="YYYY-MM-DD HH:MM"></input>
    <span class="add-on">
        <i data-time-icon="icon-time" data-date-icon="icon-calendar"></i>
    </span>
</div>

基于电影人提供的帮助的最终答案

<script type="text/javascript">
            $('#timetime').datetimepicker({
                            maskInput: true,
                          format: 'yyyy-MM-dd hh:mm',
                          });

$("form").submit(function(){
   // Let's find the input to check
   var $input = $(this).find("input[name=sdate]");
   if ($input.val()) {
  // Value is falsey (i.e. null), lets set a new one, i have inversed this, input  should be truthy
  //$input.val() = $input.val().toISOString();
    var d = $input.val();
    var iso = new Date(d).toISOString();
  //  alert(iso);
    $input.val(iso);
   }
 });
          </script>

进一步更新以在 Firefox 和 chrome 上工作

<script type="text/javascript">
    $("form").submit(function(){
    // Let's find the input to check
    var input = $(this).find("input[name=sdate]");
    if (input.val()) {
            var picker = $('#timetime').data('datetimepicker');
    //      alert(input.val());
    //      alert(picker.getLocalDate().toISOString());
            input.val(picker.getLocalDate().toISOString());
            }
    });
</script>
4

4 回答 4

8

只需使用momentjs。

http://momentjs.com/

function getUTCDate() { return moment($('#sdate').val()).utc().format('YYYY-MM-DDTHH:mm:ssZZ'); }

于 2014-03-18T16:26:13.820 回答
2
<script type="text/javascript">
    $('#timetime').datetimepicker({
                   maskInput: true,
                   format: 'yyyy-MM-dd hh:mm',
    });

$("form").submit(function(){
    var input = $('#sdate').val(); 
    var input = convertToUtc(input);
});


    function convertToUtc(str) {
        var date = new Date(str);
        var year = date.getUTCFullYear();
        var month = date.getUTCMonth()+1;
        var dd = dategetUTCDate();
        var hh = date.getUTCHours(); 
        var mi = date.getUTCMinutes();
        var sec = date.getUTCSeconds();

        // 2010-11-12T13:14:15Z

        theDate = year + "-" + (month [1] ? month : "0" + month [0]) + "-" + 
                  (dd[1] ? dd : "0" + dd[0]);
       theTime = (hh[1] ? hh : "0" + hh[0]) + ":" + (mi[1] ? mi : "0" + mi[0]);
        return [ theDate, theTime ].join("T");
     }

</script>
于 2013-08-05T13:11:25.843 回答
0

这是 UTC 到 IST 之间的转换,反之亦然 https://jsfiddle.net/wmhmgrjs/6/

//2016-08-02 12:55:19.743--UTC <==> 2016-08-02 6:25:19.743 PM --IST

var date = new Date('8/02/2016 12:55:48 AM UTC'); //2016-07-29 07:02:40.323
var s=date.toString();
alert(s);

var d = new Date('8/02/2016 6:25:00 PM GMT+0530');
//var d = new Date("August 2, 2016 18:26:00");
var n = d.toUTCString();
alert(n);
于 2016-08-02T14:03:11.993 回答
0

我面临同样的问题,我的日期选择器将 14/07/2015 00:00 GMT(PARIS) 转换为 13/07/2015 22:00 UTC。

我将其用于解决方法,因为我只想使用日期而不是时间。

var dt = new Date($scope.END_DATE.value);
dt.setUTCHours(1); //set to utc 1 a.m.
$scope.holidays.END_DATE= dt;

日期在数据库中存储为 14/07/2015 01:00。

希望能帮助到你

于 2015-07-15T09:46:32.767 回答